您好,登錄后才能下訂單哦!
這篇文章主要講解了“session在server端是怎么存在的”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“session在server端是怎么存在的”吧!
默認的,php會將session保存在/tmp目錄下,文件名為這個樣子:sess_01aab840166fd1dc253e3b4a3f0b8381.每一個文件對應了一個session(會話).
more/tmp/sess_01aab840166fd1dc253e3b4a3f0b8381
username|s:9:“phpzixue.cn”;admin|s:1:“0″;
#變量名|類型:長度:值
刪除這里的session文件,就表示對應的session失效了.
session在client端(一般是瀏覽器)如何存在的?
session在瀏覽器端,只需要保存sessionID(由server端生成的唯一ID)就可以了.有兩種保存方式:在cookie中、在url里面.如果cookie中保存sessionID,就可以看到瀏覽器的cookie中有一個PHPSESID變量.如果是URL傳遞的,就可以看到形如:
index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381的URL.(在server端通過session.use_cookies來控制使用哪一種方式)
在server端,php如何判斷session文件是否過期
如果”最后的修改時間“到”現在“超過了gc_maxlifetime(默認是1440)秒,這個session文件就被認為是過期了,在下一次session回收的時候,如果這個文件仍然沒有被更改過,這個session文件就會被刪除(session就過期了).
簡單的說,如果我登錄到某網站,如果在1440秒(默認值)內沒有操作過,那么對應的session就認為是過期了.
所以,修改php.ini文件中的gc_maxlifetime變量就可以延長session的過期時間了:(例如,我們把過期時間修改為86400秒)
session.gc_maxlifetime=86400
然后,重啟你的web服務(一般是apache)就可以了.
注意:php5里面session過期使用了回收機制.這里設置時間為86400秒,如果session在86400秒內沒有被修改過,那么在下一次”回收“時才真的被刪除。
session”回收“何時發生
默認情況下,每一次php請求,就會有1/100的概率發生回收,所以可能簡單的理解為”每100次php請求就有一次回收發生“.這個概率是通過以下參數控制的
#概率是gc_probability/gc_divisor
session.gc_probability=1
session.gc_divisor=100
注意1:假設這種情況gc_maxlifetime=120,如果某個session文件最后修改時間是120秒之前,那么在下一次回收(1/100的概率)發生前,這個session仍然是有效的.
注意2:如果你的session使用session.save_path中使用別的地方保存session,session回收機制有可能不會自動處理過期session文件.這時需要定時手動(或者crontab)的刪除過期的session:cd/path/to/sessions;find-cmin+24|xargsrm
一些特殊情況
因為回收機制會檢查文件的”最后修改時間“,所以如果某個會話是活躍的,但是session的內容沒有改變過,那么對應的session文件也就沒有改變過,回收機制會認為這是一個長時間沒有活躍的session而將其刪除.這是我們不愿看到的,可以通過增加如下的簡單代碼解決這個問題:
if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60)
$_SESSION['last_access']=time();
?>
代碼會每隔60秒,嘗試修改修改一次session.
感謝各位的閱讀,以上就是“session在server端是怎么存在的”的內容了,經過本文的學習后,相信大家對session在server端是怎么存在的這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。