Di mana variabel $ _SESSION disimpan?

158

Apakah $_SESSIONvariabel disimpan di klien atau server?

Steve Gattuso
sumber
di server tempat Anda menjalankan aplikasi php, untuk jalur tertentu Anda harus memeriksa dengan phpinfo ()
densityx

Jawaban:

168

Lokasi $_SESSIONpenyimpanan variabel ditentukan oleh session.save_pathkonfigurasi PHP . Biasanya ini ada /tmpdi sistem Linux / Unix. Gunakan phpinfo()fungsi ini untuk melihat pengaturan khusus Anda jika tidak 100% yakin dengan membuat file dengan konten ini diDocumentRoot domain Anda:

<?php
    phpinfo();
?>

Berikut ini tautan ke dokumentasi PHP tentang pengaturan konfigurasi ini:

http://php.net/manual/en/session.configuration.php#ini.session.save-path

rjamestaylor
sumber
129

Seperti yang sudah disebutkan, konten disimpan di server. Namun sesi diidentifikasi oleh id sesi, yang disimpan di klien dan dikirim dengan setiap permintaan. Biasanya id sesi disimpan dalam cookie, tetapi juga dapat ditambahkan ke url. (Itulah PHPSESSIDparameter-kueri yang beberapa kali Anda lihat)

troelskn
sumber
41
+1 karena Anda telah menyiratkan bahwa cookie tidak menyimpan konten $ _SESSION (konten ini disimpan di server, jadi tidak rentan terhadap modifikasi oleh klien)
shufler
12
Jawaban yang sangat bagus! Saya mencari pertanyaan: "Mengapa sesi kedaluwarsa setelah menghapus cache browser?". Dan Anda menyelamatkan hari saya.
Murid
2
server membuat file sess_7nu9p0fvidvva6ouaugqcc8292 dan pada peringatan browser (getCookie ('PHPSESSID')); // 7nu9p0fvidvva6ouaugqcc8292
zloctb
2
Plus1 - Untuk menjawab pertanyaan: "... disimpan pada klien atau server?"
Alex Vargas
22

Biasanya disimpan di server. Di mana mereka disimpan terserah Anda sebagai pengembang. Anda dapat menggunakan session.save_handlervariabel konfigurasi dan session_set_save_handleruntuk mengontrol bagaimana sesi disimpan di server. Metode penyimpanan default adalah menyimpan sesi ke file. Di mana mereka diselamatkan dikendalikan oleh session.save_pathvariabel.

Rob Kennedy
sumber
18

Satu tambahan: Perlu dicatat bahwa, jika "/ tmp" adalah direktori tempat data sesi disimpan (yang tampaknya merupakan nilai default), sesi tidak akan bertahan setelah reboot server web itu, karena "/ tmp "Sering dibersihkan saat reboot. Konsep kegigihan klien-bijaksana berdiri dan jatuh dengan kegigihan penyimpanan di server - yang mungkin gagal jika direktori "/ tmp" digunakan untuk data sesi.

Gero
sumber
13

Pada Debian (bukankah ini kasus untuk sebagian besar distro Linux?), Disimpan di / var / lib / php5 /. Seperti disebutkan di atas, ini dikonfigurasi di php.ini Anda.

Hans
sumber
12

Saya menggunakan Ubuntu dan sesi saya disimpan di / var / lib / php5.

Vasyl Teraz
sumber
1
Terima kasih, itu saja yang saya inginkan. Ya, jika mereka tidak berada di tempat yang biasa, saya harus membuka INI, tetapi saya hanya ingin tahu "Hei, di mana sesi biasanya disimpan?" / var / lib / php / sesi / itu.
Eric L.
7

Seperti yang ditunjukkan oleh Mr. Taylor, ini biasanya diatur dalam php.ini. Biasanya mereka disimpan sebagai file di direktori tertentu.

Brian Fisher
sumber
4

Untuk ubuntu 16.10 adalah sesi simpan di / var / lib / php / session / ...

Lukáš Kříž
sumber
0

Bagaimana cara kerjanya? Bagaimana dia tahu ini aku?

Sebagian besar sesi menetapkan kunci pengguna (disebut sessionid) pada komputer pengguna yang terlihat seperti ini: 765487cf34ert8dede5a562e4f3a7e12. Kemudian, ketika sebuah sesi dibuka di halaman lain, itu memindai komputer untuk kunci-pengguna dan berjalan ke server untuk mendapatkan variabel Anda.

Jika Anda salah menghapus cache, maka kunci pengguna Anda juga akan dihapus. Anda tidak akan bisa mendapatkan variabel lagi dari server karena Anda tidak tahu id Anda.

Emeka Obianom
sumber
0

Dalam sesi mesin Ubuntu saya disimpan di

/var/lib/php/sessions

dan Anda harus sudo lsdalam direktori ini hanya lsakan membuangnya

ls: tidak dapat membuka direktori '.': Izin ditolak

Dan pada sesi php server Windows Wamp saya disimpan di

C:\wamp64\tmp

dan jika Anda menginstal php mandiri di windows maka tidak ada nilai yang ditetapkan secara default

session.save_path => no value => no value
Ali A. Dhillon
sumber