$ _SESSION değişkenleri nerede saklanır?


158

Are $_SESSIONdeğişkenler istemci veya sunucuda depolanan?


php uygulamasını çalıştırdığınız sunucuda, belirli bir yol için phpinfo () ile kontrol etmeniz gerekir
densityx

Yanıtlar:


168

$_SESSIONDeğişken depolamanın konumu PHP'nin session.save_pathyapılandırması tarafından belirlenir . Genellikle bu /tmpbir Linux / Unix sistemindedir. Alan adınızda phpinfo()bu içeriğe sahip bir dosya oluşturarak% 100 emin değilseniz belirli ayarlarınızı görüntülemek için bu işlevi kullanın DocumentRoot:

<?php
    phpinfo();
?>

Bu yapılandırma ayarındaki PHP belgelerine bağlantı:

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


129

Daha önce de belirtildiği gibi, içerikler sunucuda saklanır. Ancak oturum, istemcide depolanan ve her istekle gönderilen bir oturum kimliği ile tanımlanır. Genellikle oturum kimliği bir çerezde saklanır, ancak URL'lere de eklenebilir. (Bu, PHPSESSIDbirkaç kez gördüğünüz sorgu parametresidir)


41
+1, çerezlerin $ _SESSION içeriğini depolamadığını ima ettiğiniz için (bu içerikler sunucuda depolanır, bu nedenle istemci tarafından yapılan değişikliklere karşı savunmasız değildir)
shufler

12
Mükemmel cevap! "Tarayıcı önbelleğini sildikten sonra oturumların süresi neden doluyor?" Sorusunu araştırıyordum. Ve sen benim günümü kurtardın.
Öğrenci

2
Sunucu tarayıcı alarma (getCookie ( 'PHPSESSID')) dosyası sess_7nu9p0fvidvva6ouaugqcc8292 аnd oluşturmak; // 7nu9p0fvidvva6ouaugqcc8292
zloctb

2
Artı1 - "... istemcide mi sunucuda mı saklanıyor?"
Alex Vargas

22

Genellikle sunucuda depolanırlar. Depolandıkları yer geliştirici olarak size kalmış. Oturumların sunucuya nasıl kaydedileceğini denetlemek için session.save_handleryapılandırma değişkenini ve simgesini kullanabilirsiniz session_set_save_handler. Varsayılan kaydetme yöntemi, oturumları dosyalara kaydetmektir. Kaydedildikleri yer session.save_pathdeğişken tarafından kontrol edilir .


18

Bir ek: Unutulmamalıdır ki, "/ tmp" oturum verilerinin saklandığı dizin ise (varsayılan değer gibi görünür), oturumlar söz konusu web sunucusunun yeniden başlatılmasından sonra "/ tmp" olarak devam etmez "genellikle yeniden başlatma sırasında temizlenir. İstemci açısından kalıcılık kavramı, sunucudaki depolamanın kalıcılığıyla birlikte durur ve oturum verileri için "/ tmp" dizini kullanılırsa başarısız olabilir.


13

Debian'da (çoğu Linux dağıtımında durum böyle değil mi?), / Var / lib / php5 / içine kaydedilir. Yukarıda belirtildiği gibi php.ini dosyasında yapılandırılmıştır.


12

Ubuntu kullanıyorum ve oturumlarım / var / lib / php5 içinde saklanıyor.


1
Teşekkürler, tek istediğim bu. Evet, her zamanki noktada değillerse, INI'leri açmam gerekecek, ama sadece "Hey, oturumlar genellikle nerede saklanıyor?" / var / lib / php / sessions / öyle.
Eric L.

7

Bay Taylor'ın işaret ettiği gibi, bu genellikle php.ini'de ayarlanır. Genellikle belirli bir dizinde dosya olarak saklanırlar.



0

O nasıl çalışır? Benim olduğumu nereden biliyor?

Çoğu oturum, kullanıcının bilgisayarında şuna benzeyen bir kullanıcı anahtarı (oturum kimliği olarak adlandırılır) ayarlar: 765487cf34ert8dede5a562e4f3a7e12. Ardından, bir oturum başka bir sayfada açıldığında, bilgisayarı bir kullanıcı anahtarı için tarar ve değişkenlerinizi almak için sunucuya çalışır.

Önbelleği yanlışlıkla temizlerseniz, kullanıcı anahtarınız da silinir. Kimliğinizi bilmediğiniz için değişkenlerinizi artık sunucudan alamazsınız.


0

Ubuntu makine oturumlarımda

/var/lib/php/sessions

ve sudo lsbu dizinde sadece lso atacak

ls: 'dizinini açamıyor.': İzin verilmedi

Ve Windows Wamp sunucumda php oturumları

C:\wamp64\tmp

ve pencerelere bağımsız php yüklerseniz, varsayılan olarak ayarlanmış bir değer yoktur

session.save_path => no value => no value

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.