php 嚴格控制session的到期時間

來源:互聯網
上載者:User
工作過一段時間,相信大家一定也碰到過一個問題:         1.前台使用者不知道怎麼的就自動掉線了.        2.後台退出登陸之後所有的前台使用者也都掉線了.        3.我想控制我的使用者半個小時自動下線,發現改了設定檔也不好使.     上述的所有問題都是我近期碰到的,後來通過查詢知道:php的session機制由幾個參數同時控制,具體是哪些我就不具體寫了,分別是一個機率,一個最大到期時間,還有一個session的儲存路徑.在php.ini中我們可以看到,php的session的預設到期時間位24分鐘,也就是說如果我們24分鐘沒有操作頁面,這個session就到期了,當然這是理想狀態下.24分鐘之後php會出發一個session的回收機制,這個機制用來檢測預設儲存目錄下的session檔案的更改時間是否為24分鐘之前,如果是那麼刪除session.當然這也是理想狀態下.這就是前面提到的一個機率了,session的回收機制是按機率觸發的,也就是說,即使你的session為24分鐘之前的檔案,如果步觸發回收機制你的session依然沒有到期.這當然也不是我們想要的了.為瞭解決這個問題就出現了我前面提到的第三個參數,也就是session的儲存路徑,如果你沒有開啟php.ini內部的session.save_path那麼session是不會有檔案產生的,所以為了能更加有效控制session我們將其開啟並且填寫一個路徑,或者在檔案中用session_save_path(".....")函數來定義這個session的儲存的路徑.還有一點很重要,那就是成如果session儲存在我們自己定義的路徑內部,seesion的回收機制是不起作用的.所以只能我們自己來控制session的到期時間了.    下面是一個我自己根據理解寫的一個關於session的到期處理類        
<?php class Session{private $savePath;//儲存session的路徑,必須是絕對路徑private $time;//儲存session的到期時間,單位是秒private $sessionName;//session的名字private $sessionValue;//session的值public function __construct($savePath){//將session存入指定的目錄$this->savePath = $savePath;            //注意:這個一定要寫在session_start前面session_save_path($this->savePath); session_start();//開啟sessionif(!is_dir($this->savePath)){                //預設為最大的許可權 0777mkdir($this->savePath) or die('系統錯誤!');}}//建立session  一共三個參數,               // $name->session名字                // $val->session值                // $time->到期時間,預設為30分鐘public function setSession($name,$val,$time=1800){$this->sessionName  = $name;$this->sessionValue  = $val;$this->time       = $time;if(!isset($_SESSION[$this->sessionName])){if(is_array($this->sessionValue)){foreach($this->sessionValue as $key=>$val){$_SESSION[$this->sessionName][$key] = $val;}}else{$_SESSION[$this->sessionName]['val']   = $this->sessionValue;}$_SESSION[$this->sessionName]["startTime"] = time();}//這時候說明session已經存在,那麼我們判斷他是否到期,如果到期,刪除sessionelse if(isset($_SESSION[$this->sessionName]["startTime"]) && time()-$_SESSION[$this->sessionName]['startTime']>=$this->time){unset($_SESSION[$this->sessionName]);}}} ?>
     通過這個類我們可以達到幾個目的:                    1.我們可以明確的控制session的到期時間.                    2.對應上面的第二個問題,我之前做使用者退出登陸的時候通常這樣寫 session_destroy();或者寫成unset($_SESSION);殊不知這樣就把所有的session都清除了,所以我們會遇到前面一個使用者退出之後,我們自己的session也被刪除了.                    3.使用者不會無緣無故的掉線了,因為對我們來說每個步驟現在都是透明的了.  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.