真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php嚴(yán)格控制session的過期時(shí)間

    工作過一段時(shí)間,相信大家一定也碰到過一個(gè)問題: 

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供烏當(dāng)網(wǎng)站建設(shè)、烏當(dāng)做網(wǎng)站、烏當(dāng)網(wǎng)站設(shè)計(jì)、烏當(dāng)網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、烏當(dāng)企業(yè)網(wǎng)站模板建站服務(wù),十年烏當(dāng)做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

        1.前臺(tái)用戶不知道怎么的就自動(dòng)掉線了.

        2.后臺(tái)退出登陸之后所有的前臺(tái)用戶也都掉線了.

        3.我想控制我的用戶半個(gè)小時(shí)自動(dòng)下線,發(fā)現(xiàn)改了配置文件也不好使.


    上述的所有問題都是我近期碰到的,后來通過查詢知道:php的session機(jī)制由幾個(gè)參數(shù)同時(shí)控制,具體是哪些我就不具體寫了,分別是一個(gè)概率,一個(gè)最大過期時(shí)間,還有一個(gè)session的存儲(chǔ)路徑.在php.ini中我們可以看到,php的session的默認(rèn)過期時(shí)間位24分鐘,也就是說如果我們24分鐘沒有操作頁面,這個(gè)session就過期了,當(dāng)然這是理想狀態(tài)下.24分鐘之后php會(huì)出發(fā)一個(gè)session的回收機(jī)制,這個(gè)機(jī)制用來檢測(cè)默認(rèn)存儲(chǔ)目錄下的session文件的更改時(shí)間是否為24分鐘之前,如果是那么刪除session.當(dāng)然這也是理想狀態(tài)下.這就是前面提到的一個(gè)概率了,session的回收機(jī)制是按概率觸發(fā)的,也就是說,即使你的session為24分鐘之前的文件,如果步觸發(fā)回收機(jī)制你的session依然沒有過期.這當(dāng)然也不是我們想要的了.為了解決這個(gè)問題就出現(xiàn)了我前面提到的第三個(gè)參數(shù),也就是session的存儲(chǔ)路徑,如果你沒有開啟php.ini內(nèi)部的session.save_path那么session是不會(huì)有文件產(chǎn)生的,所以為了能更加有效的控制session我們將其打開并且填寫一個(gè)路徑,或者在文件中用session_save_path(".....")函數(shù)來定義這個(gè)session的存儲(chǔ)的路徑.還有一點(diǎn)很重要,那就是成如果session存儲(chǔ)在我們自己定義的路徑內(nèi)部,seesion的回收機(jī)制是不起作用的.所以只能我們自己來控制session的過期時(shí)間了.

    下面是一個(gè)我自己根據(jù)理解寫的一個(gè)關(guān)于session的過期處理類

        

class Session{

private $savePath;//存儲(chǔ)session的路徑,必須是絕對(duì)路徑

private $time;//存儲(chǔ)session的過期時(shí)間,單位是秒

private $sessionName;//session的名字

private $sessionValue;//session的值

public function __construct($savePath)

{

//將session存入指定的目錄

$this->savePath = $savePath;

            //注意:這個(gè)一定要寫在session_start前面

session_save_path($this->savePath); 

session_start();//開啟session

if(!is_dir($this->savePath))

{

                //默認(rèn)為最大的權(quán)限 0777

mkdir($this->savePath) or die('系統(tǒng)錯(cuò)誤!');

}

}

//創(chuàng)建session  一共三個(gè)參數(shù),

               // $name->session名字 

               // $val->session值 

               // $time->過期時(shí)間,默認(rèn)為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();

}

//這時(shí)候說明session已經(jīng)存在,那么我們判斷他是否過期,如果過期,刪除session

else if(isset($_SESSION[$this->sessionName]["startTime"]) && time()-$_SESSION[$this->sessionName]['startTime']>=$this->time)

{

unset($_SESSION[$this->sessionName]);

}

}

}

 ?>


    通過這個(gè)類我們可以達(dá)到幾個(gè)目的:

                    1.我們可以明確的控制session的過期時(shí)間.

                    2.對(duì)應(yīng)上面的第二個(gè)問題,我之前做用戶退出登陸的時(shí)候通常這樣寫 session_destroy();或者寫成unset($_SESSION);殊不知這樣就把所有的session都清除了,所以我們會(huì)遇到前面一個(gè)用戶退出之后,我們自己的session也被刪除了.

                    3.用戶不會(huì)無緣無故的掉線了,因?yàn)閷?duì)我們來說每個(gè)步驟現(xiàn)在都是透明的了.

    當(dāng)然我也有一些疑問:

        1.為什么php會(huì)這樣設(shè)計(jì)session機(jī)制呢?

        2.服務(wù)器到底有沒有給我們留下創(chuàng)建文件的權(quán)限呢?這個(gè)類只是一個(gè)小小的測(cè)試,至于實(shí)際工作中會(huì)碰見什么樣的問題,我們敬請(qǐng)期待.


分享名稱:php嚴(yán)格控制session的過期時(shí)間
當(dāng)前網(wǎng)址:http://weahome.cn/article/iecsdi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部