天天看點

php設定session永不過期

url:http://www.phpiask.com/?p=157

讓PHP的session永不過期,你可能沒有遇到這麼郁悶的問題,但是我遇到過,很郁悶。

我們前期開發了一個隻有公司客服人員才能使用的系統——有限的幾個客服人員。就是這有限的幾個客服人員前幾天突然就提出這樣的問題:我們每隔很短一段時間(半個小時不操作頁面),正着急解決客戶問題的時候,系統卻提示需要登入,耽誤了客戶的時間……這很不爽!

客戶就是上帝,唯一的上帝。于是上峰要求我們能夠實作PHP中的session永不過期,除非我們的客服人員人為的讓他過期了。出于安全性的考慮我很不了解這種永不過期的行為;出于懶惰的原因我真的不想修改以前的程式。但是沒有辦法,我依然需要改。

不修改程式是最好的方法了,因為如果修改程式,測試部一定非常郁悶像我一樣,那麼隻能修改系統環境配置,其實很簡單,打開php.ini設定檔案,修改三行如下:

1、session.use_cookies

把這個的值設定為1,利用cookie來傳遞sessionid

2、session.cookie_lifetime

這個代表SessionID在用戶端Cookie儲存的時間,預設是0,代表浏覽器一關閉SessionID就廢棄……就是因為這個是以PHP的session不能永久使用! 那麼我們把它設定為一個我們認為很大的數字吧,999999999怎麼樣,可以的!就這樣。

3、session.gc_maxlifetime

這個是Session資料在伺服器端儲存的時間,如果超過這個時間,那麼Session資料就自動删除! 那麼我們也把它設定為99999999。

就這樣一切ok了,當然你不相信的話就測試一下看看——設定一個session值過個10天半個月的回來看看,如果你的電腦沒有斷電或者當機,你仍然可以看見這個sessionid。

當然也可能你沒有控制伺服器的權限并不能像我一樣幸運的可以修改php.ini設定,一切依靠我們自己也是有辦法的,當然就必須利用到用戶端存儲 cookie了,吧得到的sessionID存儲到用戶端的cookie裡面,設定這個cookie的值,然後把這個值傳遞給session_id()這 個函數,具體做法如下:

1
2
3
4
5
6
7
8
9
10      
<?php
session_start();// 啟動Session
$_SESSION['count'];// 注冊Session變量Count
isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID=session_id();
// 如果設定了$PHPSESSID,就将SessionID指派為$PHPSESSID,否則生成SessionID
 
$_SESSION['count']++;// 變量count加1
setcookie('PHPSESSID',$PHPSESSID,time()+3156000);// 儲存SessionID到Cookie中
echo$count;// 顯示Session變量count的值
?>
           

如果很久以後(多久?你自己看吧)你回來重新整理這個頁面,輸出的數字比你走的時候大了1那就對了!如果大了很多,估計是誰動你電腦了,這次測試就不準确了,呵呵……重新出去一會兒吧!

注意:在setcookie一行中的’PHPSESSID’并不是一定的,如果你遇到有個患有修改狂疾病的網管員,他可能對其做了修改,最好的方法是用phpinfo()這個函數看看,确認一下session.name一項的值,比較科學。