Apa perbedaan antara session_unset () dan session_destroy () di PHP?

88

Dari dokumentasi php.net :

session_destroy - Menghancurkan semua data yang terdaftar ke sesi

session_unset - Bebaskan semua variabel sesi

Pertanyaan tiga bagian saya adalah:

Kedua fungsi tersebut tampak sangat mirip.
Apa sebenarnya perbedaan antara keduanya?

Keduanya tampaknya menghapus semua variabel yang terdaftar ke sesi. Apakah ada di antara mereka yang benar-benar merusak sesi itu sendiri? Jika tidak, bagaimana Anda melakukannya (hancurkan sesi itu sendiri).

Apakah benar bahwa tidak satu pun dari kedua fungsi tersebut menghapus cookie sesi di klien?

Johan
sumber

Jawaban:

145

session_unsetbaru saja menghapus $_SESSIONvariabel. Ini setara dengan melakukan:

$_SESSION = array();

Jadi ini tidak hanya memengaruhi $_SESSIONinstance variabel lokal tetapi tidak pada data sesi dalam penyimpanan sesi.

Berbeda dengan itu, session_destroymenghancurkan data sesi yang disimpan di penyimpanan sesi (misalnya, file sesi di sistem file).

Segala sesuatu yang lain tetap tidak berubah.

Gumbo
sumber
@ Gumbo Apakah tidak ada masalah dengan session_unset () yang tidak digunakan lagi sekarang? Saya memeriksa ini dan tidak berhasil untuk saya.
Navneet
@hak apa peringatannya?
GoTo
4
@GoTo: session_unset itu digunakan untuk menghapus variabel global yang terdaftar sebagai variabel sesi seperti yang umum di PHP 4. Penggunaan fungsi itu pada hari ini adalah anakronistik dan tidak perlu. Satu-satunya alasan masih ada di PHP mungkin adalah kompatibilitas ke belakang dan tidak ada yang lain. Jika Anda menulis kode baru, Anda tidak boleh menggunakannya. Jika Anda menemukannya di dalam kode, Anda harus menghapusnya bersama dengan panggilan ke session_register () dan variabel sesi PHP 4 lainnya menangani fungsi kecuali Anda secara eksplisit berurusan dengan kode PHP 4.
hakre
5
Masih Membingungkan: Jelaskan local $_SESSION variable instance vs session data in the session storage. Seperti yang saya tahu ada 1000 orang seperti saya yang tidak mengerti maksud Anda. Terima kasih
Pratik
1
Jawaban Anda terlalu membingungkan. Harap pertimbangkan untuk mengeditnya, karena saya masih berpikir keduanya merusak sesi
Pratik
17

session_destroy(); menghapus seluruh sesi.

session_unset();menghapus hanya variabel dari sesi - sesi masih ada. Hanya data yang terpotong.

Xamael
sumber
15
session_unset();

Hapus semua data dari semua variabel sesi.


session_destroy();

Hapus semua sesi.


Contoh :

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

$_SESSION[a]adalah NULL.


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

$_SESSION[a]adalah 1234.


Jadi, saya akan menggunakan:

session_start();
session_destroy();   
session_start();  
$a = "1234";
$_SESSION[a] = $a;
SLyHuy
sumber
2
di tengah contoh Anda -> session_unset();Anda TIDAK melakukan apa-apa karena Anda masih bisa menggunakan sesi $_SESSION["a"] , jadi apa gunanya?
Pratik
1
$_SESSION[a]harus $_SESSION['a'] dan tidak seperti apa yang Anda katakan ini BUKAN NIHIL dalam contoh pertama Anda
Istiaque Ahmed
6

session_unset()akan menghapus $_SESSIONvariabel (seperti di array()), tetapi tidak akan menyentuh file sesi. Tapi saat skrip berakhir; status $_SESSIONakan ditulis ke file. Maka itu akan menghapus file tetapi tidak akan menghapusnya. Ketika Anda menggunakannya session_destroy()tidak akan menyentuh $_SESSION(Gunakan var_dump($_SESSION)setelah session_destroy()), tetapi akan menghapus file sesi, jadi ketika skrip keluar tidak akan ada file untuk menulis status $_SESSION.

kaushik
sumber
1

Saya mencoba menggunakan session_unset($_SESSION['session_name'])pemikiran itu hanya akan membatalkan nama sesi tertentu atau individu / tunggal. Tetapi menggunakan session_unset($_SESSION['session_name'])hanya akan membatalkan semua nama sesi. Kode yang tepat untuk digunakan hanya unset($_SESSION['session_name'])jika Anda ingin menghapus satu nama sesi.

Marvin
sumber
0

session_destroy()akan menghapus sesi setelah memindahkan halaman dan session_unset()akan menghapus sesi saat kode dijalankan.

Radian Yusuf Mahendra
sumber
0

session_start (); #itu akan membuat array virtual (asosiatif) di memori realtime browser

dua item ditambahkan

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

tes1

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

tes2

> 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

tes3

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

uji blok 1, 2, atau 3 secara individual dengan mengomentari orang lain

Yadab Sd
sumber
-2

Saya pikir session_destroy () dan session_unset () harus digunakan pada saat yang sama untuk memastikan bahwa data sesi benar-benar dihapus.

Riaj Mahmud Rasel
sumber
Saya pikir berarti Anda tidak yakin tentang jawabannya. Ini harus menjadi komentar bukan jawaban.
Shaiful Islam
4
session_unset()setelah itu session_destroy()tidak ada gunanya. Gunakan session_unset()untuk menghapus semua kunci dan nilai dari $ _SESSION superglobal, atau gunakan session_destroy()untuk menghapus seluruh sesi; jangan gunakan keduanya hanya untuk "memastikan", percayakan fungsi tersebut untuk melakukan tugasnya.
redburn
@redburn session_destroy()tidak membatalkan setelan var superglobal sebelum keluar dari laman ini.
Yousha Aleayoub