<?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();//開啟session
if(!is_dir($this->savePath))
{
//默認為最大的權限 0777
mkdir($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已經存在,那麼我們判斷他是否過期,如果過期,刪除session
else 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.用戶不會無緣無故的掉線了,因為對我們來說每個步驟現在都是透明的了.