php session不起作用的解決方法:首先在頁面的開始處呼叫「session_save_path()」函數;然後把保存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中文網其他相關文章!