首頁  >  文章  >  後端開發  >  php session 不起作用怎麼辦

php session 不起作用怎麼辦

藏色散人
藏色散人原創
2020-08-22 09:17:322805瀏覽

php session不起作用的解決方法:首先在頁面的開始處呼叫「session_save_path()」函數;然後把保存session的目錄指向一個專用的目錄即可。

php session 不起作用怎麼辦

推薦:《PHP影片教學

php Session失效的原因

最近公司的專案出現了一個Session失效的問題,程式運作之後,session不到幾分鐘就失效了。後來在網路上看了很久,了解了它的機制:Session在lunix裡面是儲存在公共的路徑裡面,這就會導致一個問題,如果程式裡面有很多的Session應用,就會相互的影響。

   後來我嘗試修改session.gc_maxlifetime 但是我發現這個參數基本上不行。在預設情況下,PHP 中的session資訊會以文字檔案的形式,被儲存在系統的暫存檔案目錄中。這個路徑由配置參數session.save_path指定。在Linux下,這條路徑通常為\tmp,在 Windows下通常為C:\Windows\Temp。當伺服器上有多個PHP應用時,它們會把自己的session檔案都保存在同一個目錄中(因為它們使用同一個session.save_path參數)。同樣地,這些PHP應用也會以一定機率啟動GC,掃描所有的session檔。

  問題在於,GC在工作時,並不會區分不同網站的session。舉例言之,站點A的gc_maxlifetime設定為2小時,站點B的 gc_maxlifetime設定為預設的24分鐘。當站點B的GC啟動時,它會掃描公用的臨時檔案目錄,把所有超過24分鐘的session檔案全部刪除掉,而不管它們來自於站點A或B。這樣,站點A的gc_maxlifetime設定就形同虛設了。

   所以具體操作就是每個專案擁有自己的session路徑,找到問題所在,解決起來就很簡單了。在頁面的開始處呼叫session_save_path()函數,它能夠修改session.save_path參數,把保存session的目錄指向一個專用的目錄,例如\tmp\myapp\。這樣,gc_maxlifetime參數就運作正常了。

具體程式碼:

session_start();
ini_set('session.save_path','/tmp/');
//6个钟头
ini_set('session.gc_maxlifetime',21600);
//保存一天
$lifeTime = 24 * 3600;
setcookie(session_name(), session_id(), time() + $lifeTime, "/");

以上是php session 不起作用怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn