PHP'de session_unset () ve session_destroy () arasındaki fark nedir?


88

Gönderen php.net belgelerinde:

session_destroy - Bir oturuma kayıtlı tüm verileri yok eder

session_unset - Tüm oturum değişkenlerini serbest bırakır

Üç parçalı sorum şu:

İki işlev birbirine çok benziyor.
İkisi arasındaki gerçekten fark nedir?

Her ikisi de bir oturuma kayıtlı tüm değişkenleri siliyor gibi görünüyor. Bunlardan herhangi biri seansı gerçekten yok ediyor mu? Değilse, bunu nasıl başarırsınız (oturumun kendisini yok edin).

İki işlevden hiçbirinin istemcideki oturum çerezini silmemesi doğru mu?

Yanıtlar:


145

session_unsetsadece $_SESSIONdeğişkeni temizler . Yapmakla eşdeğerdir:

$_SESSION = array();

Bu nedenle, bu yalnızca yerel $_SESSIONdeğişken örneğini etkiler, ancak oturum depolamasındaki oturum verilerini etkilemez .

Bunun tersine session_destroy, oturum depolamasında depolanan oturum verilerini (örneğin, dosya sistemindeki oturum dosyası) yok eder.

Geri kalan her şey değişmeden kalır.


@Gumbo Şu anda kullanımdan kaldırılan session_unset () ile ilgili bir sorun yok mu? Bunu kontrol ettim ve benim için işe yaramadı.
Navneet

@hakre uyarı nedir?
GoTo

4
@GoTo: Bu session_unset, PHP 4'te yaygın olduğu gibi, oturum değişkenleri olarak kaydedilen global değişkenlerin setini kaldırmak için kullanıldı. Bu fonksiyonun bugün itibariyle kullanımı anakronistiktir ve gerekli değildir. Hala PHP'de olmasının tek nedeni muhtemelen geriye dönük uyumluluk ve başka hiçbir şey olmamasıdır. Yeni kod yazarsanız kullanmamalısınız. Kod içinde bulursanız, PHP 4 koduyla açıkça ilgilenmediğiniz sürece, session_register () ve PHP 4 oturum değişkenlerini işleme işlevlerinin geri kalanıyla birlikte kaldırmanız gerekir.
hakre

5
Yine de kafa karıştırıcı: Lütfen açıklayın local $_SESSION variable instance vs session data in the session storage. Bildiğim kadarıyla benim gibi senin fikrini anlamayan 1000 kişi var. Teşekkürler
Pratik

1
Cevabınız çok karışık. Lütfen düzenlemeyi düşünün, çünkü her ikisinin de oturumu mahvettiğini düşünüyorum
Pratik

17

session_destroy(); tüm oturumu siliyor.

session_unset();yalnızca oturumdaki değişkenleri siler - oturum hala mevcuttur. Yalnızca veriler kesilir.


15
session_unset();

Sadece tüm oturum değişkeninin tüm verilerini temizleyin.


session_destroy();

Tüm oturumu kaldır.


Örnek :

session_start();
session_destroy();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]olduğunu NULL.


session_start();
session_unset();     
$a = "1234";
$_SESSION[a] = $a;

$_SESSION[a]olduğunu 1234.


Bu yüzden kullanacağım:

session_start();
session_destroy();   
session_start();  
$a = "1234";
$_SESSION[a] = $a;

2
ortadaki örneğinizde -> session_unset();oturumunu hala kullanabildiğiniz için hiçbir şey YAPMIYORSUNUZ $_SESSION["a"] , öyleyse bunun faydası nedir?
Pratik

1
$_SESSION[a]olmalı $_SESSION['a'] ve bu ilk örnekteki NOT NULL olduğunu söylediklerini aksine
Istiaque Ahmed

6

session_unset()$_SESSIONdeğişkeni temizleyecektir (olduğu gibi array()), ancak oturum dosyasına dokunmayacaktır. Ama senaryo bittiğinde; devlet $_SESSIONdosyasına yazılır. Ardından dosyayı temizler ancak silmez. Kullandığınızda ( Sonra kullan ) seçeneğine session_destroy()dokunmaz , ancak oturum dosyasını siler, bu nedenle komut dosyası çıkıldığında .$_SESSIONvar_dump($_SESSION)session_destroy()$_SESSION


1

session_unset($_SESSION['session_name'])Yalnızca belirli veya bireysel / tek oturum adını kaldıracağını düşünerek kullanmaya çalıştım . Ancak kullanmak session_unset($_SESSION['session_name'])yalnızca tüm oturum adlarını kaldırır. Kullanılacak doğru kod, yalnızca unset($_SESSION['session_name'])tek bir oturum adı ayarını kaldırmak istemenizdir.


0

session_destroy()sayfayı taşıdıktan sonra oturumu session_unset()silecek ve kod çalıştırıldığında oturumu silecektir.


0

session_start (); #it, tarayıcının gerçek zamanlı belleğinde sanal bir dizi (ilişkilendirilebilir) oluşturur

iki öğe eklendi

> $_SESSION['me'] = "Yadab";  
> $_SESSION['you'] = "Avi";
>
> print_r($_SESSION); #will give, array( "me"=>"Yadab", "you"=>"Avi" )

test1

> unset($_SESSION['me']); #only 'me' variable is removed fully (index & value) 
> print_r($_SESSION); #now the array is Array("you"=>"Avi")

test2

> session_destroy(); #will unset the values of all session variables, but indexes exists 
> print_r($_SESSION); #Output, Array("you"=>undefined)
> #but some browser can store the value in cookies

test3

> session_unset(); #will unset all the main variables not only the values 
> print_r($_SESSION); #that means session array is now empty, like Array()

diğerlerine yorum yaparak blok 1, 2 veya 3'ü tek tek test edin


-2

Oturum verilerinin kesinlikle silindiğinden emin olmak için session_destroy () ve session_unset () aynı anda kullanılması gerektiğini düşünüyorum.


Sanırım cevabından emin olmadığınız anlamına geliyor, bu bir cevap değil yorum olmalı.
Shaiful Islam

4
session_unset()sonra session_destroy()anlamsız olurdu. session_unset()$ _SESSION süper küreselinden tüm anahtarları ve değerleri temizlemek için kullanın veya session_destroy()tüm oturumu silmek için kullanın ; ikisini de yalnızca "emin olmak" için kullanmayın, işleve işini yapması için güvenin.
redburn

@redburn session_destroy(), geçerli sayfadan çıkana kadar seans süper küresel değişkenini silmiyor .
Yousha Aleayoub
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.