PHP中的session永不過期的解決思路及實現(xiàn)方法分享
更新時間:2011年04月20日 23:07:04 作者:
讓PHP的session永不過期,你可能沒有遇到這么郁悶的問題,但是我遇到過,很郁悶。
我們前期開發(fā)了一個只有公司客服人員才能使用的系統(tǒng)——有限的幾個客服人員。就是這有限的幾個客服人員前幾天突然就提出這樣的問題:我們每隔很短一段時間 (半個小時不操作頁面),正著急解決客戶問題的時候,系統(tǒng)卻提示需要登錄,耽誤了客戶的時間…… 這很不爽!
客戶就是上帝,唯一的上帝。于是上峰要求我們能夠?qū)崿F(xiàn)PHP中的session永不過期,除非我們的客服人員人為的讓他過期了。出于安全性的考慮我很不理解這種永不過期的行為;出于懶惰的原因我真的不想修改以前的程序。但是沒有辦法,我依然需要改。
不修改程序是最好的方法了,因為如果修改程序,測試部一定非常郁悶像我一樣,那么只能修改系統(tǒng)環(huán)境配置,其實很 簡單,打開php.ini設(shè)置文件,修改三行如下:
1、session.use_cookies
把這個的值設(shè)置為1,利用cookie來傳遞sessionid
2、session.cookie_lifetime
這個代表SessionID在客戶端Cookie儲存的時間,默認(rèn)是0,代表瀏覽器一關(guān)閉SessionID就作廢……就是因為這個所以PHP的 session不能永久使用! 那么我們把它設(shè)置為一個我們認(rèn)為很大的數(shù)字吧,999999999怎么樣,可以的!就這樣。
3、session.gc_maxlifetime
這個是Session數(shù)據(jù)在服務(wù)器端儲存的時間,如果超過這個時間,那么Session數(shù)據(jù)就自動刪除! 那么我們也把它設(shè)置為99999999。
就這樣一切ok了,當(dāng)然你不相信的話就測試一下看看——設(shè)置一個session值過個10天半個月的回來看看,如果你的電腦沒有斷電或者宕機,你仍 然可以看見這個sessionid。
當(dāng)然也可能你沒有控制服務(wù)器的權(quán)限并不能像我一樣幸運的可以修改php.ini設(shè)置,一切依靠我們自己也是有辦法的,當(dāng)然就必須利用到客戶端存儲 cookie了,吧得到的sessionID存儲到客戶端的cookie里面,設(shè)置這個cookie的值,然后把這個值傳遞給session_id()這 個函數(shù),具體做法如下:
<?php
session_start(); // 啟動Session
$_SESSION['count']; // 注冊Session變量Count
isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID = session_id();
// 如果設(shè)置了$PHPSESSID,就將SessionID賦值為$PHPSESSID,否則生成SessionID
$_SESSION['count']++; // 變量count加1
setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 儲存SessionID到Cookie中
echo $count; // 顯示Session變量count的值
?>
如果很久以后(多久?你自己看吧)你回來刷新這個頁面,輸出的數(shù)字比你走的時候大了1那就對了!如果大了很多,估計是誰動你電腦了,這次測試就不準(zhǔn) 確了,呵呵……重新出去一會兒吧!
注意:在setcookie一行中的'PHPSESSID'并不是一定的,如果你遇到有個患有修改狂疾病的網(wǎng)管員,他可能對其做了 修改,最好的方法是用phpinfo()這個函數(shù)看看,確認(rèn)一下session.name一項的值,比較科學(xué)。
客戶就是上帝,唯一的上帝。于是上峰要求我們能夠?qū)崿F(xiàn)PHP中的session永不過期,除非我們的客服人員人為的讓他過期了。出于安全性的考慮我很不理解這種永不過期的行為;出于懶惰的原因我真的不想修改以前的程序。但是沒有辦法,我依然需要改。
不修改程序是最好的方法了,因為如果修改程序,測試部一定非常郁悶像我一樣,那么只能修改系統(tǒng)環(huán)境配置,其實很 簡單,打開php.ini設(shè)置文件,修改三行如下:
1、session.use_cookies
把這個的值設(shè)置為1,利用cookie來傳遞sessionid
2、session.cookie_lifetime
這個代表SessionID在客戶端Cookie儲存的時間,默認(rèn)是0,代表瀏覽器一關(guān)閉SessionID就作廢……就是因為這個所以PHP的 session不能永久使用! 那么我們把它設(shè)置為一個我們認(rèn)為很大的數(shù)字吧,999999999怎么樣,可以的!就這樣。
3、session.gc_maxlifetime
這個是Session數(shù)據(jù)在服務(wù)器端儲存的時間,如果超過這個時間,那么Session數(shù)據(jù)就自動刪除! 那么我們也把它設(shè)置為99999999。
就這樣一切ok了,當(dāng)然你不相信的話就測試一下看看——設(shè)置一個session值過個10天半個月的回來看看,如果你的電腦沒有斷電或者宕機,你仍 然可以看見這個sessionid。
當(dāng)然也可能你沒有控制服務(wù)器的權(quán)限并不能像我一樣幸運的可以修改php.ini設(shè)置,一切依靠我們自己也是有辦法的,當(dāng)然就必須利用到客戶端存儲 cookie了,吧得到的sessionID存儲到客戶端的cookie里面,設(shè)置這個cookie的值,然后把這個值傳遞給session_id()這 個函數(shù),具體做法如下:
復(fù)制代碼 代碼如下:
<?php
session_start(); // 啟動Session
$_SESSION['count']; // 注冊Session變量Count
isset($PHPSESSID)?session_id($PHPSESSID):$PHPSESSID = session_id();
// 如果設(shè)置了$PHPSESSID,就將SessionID賦值為$PHPSESSID,否則生成SessionID
$_SESSION['count']++; // 變量count加1
setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 儲存SessionID到Cookie中
echo $count; // 顯示Session變量count的值
?>
如果很久以后(多久?你自己看吧)你回來刷新這個頁面,輸出的數(shù)字比你走的時候大了1那就對了!如果大了很多,估計是誰動你電腦了,這次測試就不準(zhǔn) 確了,呵呵……重新出去一會兒吧!
注意:在setcookie一行中的'PHPSESSID'并不是一定的,如果你遇到有個患有修改狂疾病的網(wǎng)管員,他可能對其做了 修改,最好的方法是用phpinfo()這個函數(shù)看看,確認(rèn)一下session.name一項的值,比較科學(xué)。
相關(guān)文章
php過濾所有惡意字符(批量過濾post,get敏感數(shù)據(jù))
最近dedecms報漏洞不斷,這里分享下php的過濾函數(shù),大牛飄過吧,給小黑闊們學(xué)習(xí)交流用2014-03-03php的chr和ord函數(shù)實現(xiàn)字符加減乘除運算實現(xiàn)代碼
這兩個函數(shù)到底有什么用呢? 用來做字符加減運算最合適了. 普通的字符是無法做加減運算指向下一個字符的. 而轉(zhuǎn)成ASCII后就可以做加減乘除了. 處理好后再轉(zhuǎn)成字符就可以了. 目前的很多字符串加密,解密都用到此功能!2011-12-12PHP使用HTML5 FileApi實現(xiàn)Ajax上傳文件功能示例
這篇文章主要介紹了PHP使用HTML5 FileApi實現(xiàn)Ajax上傳文件功能,結(jié)合實例形式分析了HTML5 FileApi的功能、原理及php使用HTML5 FileApi實現(xiàn)ajax上傳的相關(guān)操作技巧,需要的朋友可以參考下2019-07-07解決微信授權(quán)回調(diào)頁面域名只能設(shè)置一個的問題
在做項目集成微信登錄以及微信支付的時候,都需要進行用戶授權(quán)。本文主要介紹了關(guān)于網(wǎng)頁授權(quán)回調(diào)域名的說明以及解決微信授權(quán)回調(diào)頁面域名只能設(shè)置一個問題的方案。需要的朋友可以參考借鑒2016-12-12