在PHP4.0中加入了對Session的支持,方便了咱們不少程序,好比購物車等等!
在不少論壇中,Session也用於處理用 戶的登錄,記錄下用戶名和密碼,使得用戶沒必要每次都輸入本身的用戶名和密碼!可是通常的Session的生命期有限,若是用戶關閉了瀏覽器,就不能保存 Session的變量了!那麼怎麼樣能夠實現Session的永久生命期呢?php
你們知道,Session儲存在服務器端,根據客戶端 提供的SessionID來獲得這個用戶的文件,而後讀取文件,取得變量的值,SessionID可使用客戶端的Cookie或者Http1.1協議的 Query_String(就是訪問的URL的「?」後面的部分)來傳送給服務器,而後服務器讀取Session的目錄……
要實現 Session的永久生命期,首先須要瞭解一下php.ini關於Session的相關設置(打開php.ini文件,在「[Session]」部分):
引用內容 瀏覽器
一、 session.use_cookies:默認的值是「1」,表明SessionID使用Cookie來傳遞,反之就是使用Query_String來傳 遞;
二、session.name:這個就是SessionID儲存的變量名稱,多是Cookie,也多是Query_String來 傳遞,默認值是 「PHPSESSID」;
三、session.cookie_lifetime:這個表明SessionID在客戶端 Cookie儲存的時間,默認是0,表明瀏覽器一關閉SessionID就做廢……就是由於這個因此Session不能永久使用!
四、session.gc_maxlifetime:這個是Session數據在服務器端儲存的時間,若是超過這個時間,那麼Session數據就自動刪除!
下面開始講使用永久Session的原理和步驟。服務器
若是你擁有服務器的操做權限,那麼設置這個很是很是的簡單,只是須要進行 以下的步驟:
一、把「session.use_cookies」設置爲1,打開Cookie儲存SessionID,不過默認就是 1,通常不用修改;
二、把「session.cookie_lifetime」改成正無窮(固然沒有正無窮的參數,不過999999999 和正無窮也沒有什麼區別);
三、把「session.gc_maxlifetime」設置爲和 「session.cookie_lifetime」同樣的時間;
設置完畢後,打開編輯器,輸入以下的代碼:
------------------------------------------------------------------------------------
<?
session_start();
session_register('count');
$count++;
echo $count;
?>
------------------------------------------------------------------------------------
而後保存爲「session_check.php」,用瀏覽器打開「session_check.php」,看看顯示的是否是「1」,再關 閉瀏覽器,而後再打開瀏覽器訪問「session_check.php」,若是顯示「2」,那麼恭喜了,你已經成功;若是失敗的話,請檢查你前面的設置。cookie
若是你沒有服務器的操做權限,那就比較麻煩了,你須要經過PHP程序改寫SessionID來實現永久的Session數據保 存。session
查查php.net的函數手冊,能夠見到有「session_id」這個函數:若是沒有設置參數,那麼將返回當前的SessionID,若是設置了參 數,就會將當前的SessionID設置爲給出的值……
只要利用永久性的Cookie加上「session_id」函數,就能夠實現永久 Session數據保存了!
可是爲了方便,咱們須要知道服務器設置的「session.name」,可是通常用戶都沒有權限查看服務器的 php.ini設置,不過PHP提供了一個很是好的函數「phpinfo」,利用這個能夠查看幾乎全部的PHP信息!
------------------------------------------------------------------------------------
<title>PHP相關信息顯示</title>
<?phpinfo()?>
------------------------------------------------------------------------------------
打開編輯器,輸入上面的代碼,而後在瀏覽器中運行這個程序,會見到PHP的相關信息(如圖1所示)。其中有一項 「session.name」的參數(圖中已經標出),這個就是咱們須要的服務器「session.name」,通常是「PHPSESSID」。
記下了SessionID的名稱後,咱們就能夠實現永久的Session數據儲存了!
打開編輯器,輸入下面的代碼:
------------------------------------------------------------------------------------
<?
session_start(); // 啓動Session
session_register('count'); // 註冊Session變量Count
if(isset($PHPSESSID)) {
session_id($PHPSESSID);
} // 若是設置了$PHPSESSID,就將SessionID賦值爲$PHPSESSID,不然生成SessionID
$PHPSESSID = session_id(); // 取得當前的SessionID
$count++; // 變量count加1
setcookie('PHPSESSID', $PHPSESSID, time()+3156000); // 儲存SessionID到Cookie中
echo $count; // 顯示Session變量count的值
?>
------------------------------------------------------------------------------------
保存以後,利用和剛纔擁有服務器權限時候的檢測同樣的方法,檢測是否成功的保存了SessionID。
編輯器