1. 程式人生 > >php Session失效的原因

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失效原因

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

php session失效

 大部分原因是因為原來存session的目錄無寫許可權或目錄不存在解決方法:開啟php.ini,設定如下兩項 session.save_path = "D:/phpStudy/tmp" session.auto_start = 1

關閉瀏覽器後Session失效原因分析

1.從伺服器的角度看:session的壽命週期預設是30分鐘,這裡指的是某個session物件在服 務器中的記憶體中的壽命。 2.從瀏覽器的角度看:當我們的瀏覽器首次訪問伺服器的某個servlet的時候會建立一個新的session物件(如果這個被訪問的servlet有獲取session物件的語句) 後會把此s

PHP session 失效不傳遞的解決辦法

PHP中,session不能傳遞到下一個頁面去,一般有兩種情況: 我們先寫個php檔案:<?=phpinfo()?>, 傳到伺服器去看看伺服器的引數配置。 轉到session部分,看到session.use_trans_sid引數被設為了零。 這 個引數

PHP Header失效原因分析

在PHP中用header("location:test.php")進行跳轉要注意以下幾點: 1、location和“:”號間不能有空格,否則會出錯。 2、在用header前不能有任何的輸出,包括include的頁面中標籤“?>”後不能有空格!! 3、hea

session失效問題的可能原因

最近寫網頁,發現session只要一分鐘就會失效(取不出存在session裡的值),設定了session的最大不活動時間為30分鐘,但是依然過一分鐘session就失效了,然後給session加了生死監聽,確實要過30分鐘,session上的監聽器的銷燬方法才啟

小程式request請求PHP伺服器session失效的解決,header頭部加cookie

經過各種百度查詢,總算摸索出來了,跟php的小夥伴們分享下: app.js: //登入流程 //獲取openid 等資訊並存儲資料 wx.login({ success:

php session存入redis

ice local ons o-c php5 hat phpredis 需要 path 一、 安裝phpredis擴展php連接redis需要安裝phpredis擴展。下載地址:https://github.com/phpredis/phpredis/releases,選用

Asp.Net程序根目錄下文件夾操作導致Session失效的解決方案

rgs get bject process simple exce cep clas .net 1、配置web.config <system.web> <sessionState mode="StateServer" stateConnectio

Spring 監聽session 失效方法

con eve spring註解 無法 nco clas textutils creat 監聽器 public class SessionCounter implements HttpSessionListener { private static int activ

php session 保存到redis 實現session的共享

.com 技術 src cnblogs logs png images 9.png p s 1.redis安裝肯定都會了,就不介紹了。 2.核心代碼 php session 保存到redis 實現session的共享

session失效時間設置

start tom timeout nac clas 代碼 int 時間設置 active session失效時間設置 一、java代碼 request.getSession().setMaxInactiveInterval(1800);/*秒為單位*/

php session機制與cookie機制以及聯系與區別

標識 級別 聯系 是什麽 生命周期 技術 路徑 多次 瀏覽器中 session與cookie是在做項目中很常用的會話技術,session與cookie也是面試中被問到頻率最高的問題,有一次我去面試,面試官就懟著我session與cookie一直問(頭都大了),下面總結了一些

設置session失效時間

需要 all modify tomcat ssi ted int 方式 onf 1. 在web容器中設置(此處以tomcat為例)在tomcat-5.0.28\conf\web.xml中設置,以下是tomcat 5.0中的默認配置:<!-- =============

php session cookie

csdn blank 請求 找到 ref ice ssi 內容 瀏覽器 php的session是保存在服務器,cookie保存在客戶端瀏覽器,兩個是通過PHPSESSID(默認,可修改)關系起來,帶有PHPSESSID的cookie請求服務器時,服務器在php的sessio

ajax請求session失效重定向到登錄頁面

ttr == als xmlhttp 操作 var ajax請求 direct 自定義 在ajax請求的頁面引入一個自定義的AjaxRedirect.js的文件 AjaxRedirect.js的代碼如下: $(function(){ $.ajaxSetup({

php session 會話保存到redis

hand 計算機 close gpo pat div 優化 io讀寫 鎖定 php的session會話默認時以文件形式保存在php.ini配置文件設置的會話緩存目錄,文件保存會話的效率很低,每當每個用戶登錄一次就會在服務器上生成一個唯一的session_id文件,當用戶登錄

解決IIS設置多個工作進程中Session失效的問題

OS 進制 註冊表 tcpip session 其中 存在 webconfig tro 利用StateServer實現Session共享 session保存在專門的StateServer中,該種方式,性能損失比sql略好。比inproc據說有10%-15%的性能損失。怎麽使

Nginx PHP fpm forbidden 原因

class 不一致 fast pass stc blog clas www AR 可能是標紅目錄層級不一致 location / { root /var/www/html/public; index index.php; }

php session實現原理分析

keep enc accep referer zip image time -s accept http://www.jb51.net/article/77726.htm 第一次會話時會有Set-Cookie響應頭返回,設置上PHPSESSID cookie Cache