class Session
{
private $_sessionId;
private $_sessionPath = '/tmp/session';
public function __construct()
{
if(isset($_COOKIE['PHPSESSID']) && $this->checkSession($_COOKIE['PHPSESSID'])) {
$this->_sessionId = $_COOKIE['PHPSESSID'];
} else {
$this->_sessionId = uniqid();
setcookie("PHPSESSID", $this->_sessionId);
}
}
public function setSession($key, $value)
{
$sessionInfo = $this->getSessionInfo();
$sessionInfo[$key] = $value;
$sessionFile = "{$this->_sessionPath}/{$this->_sessionId}";
file_put_contents($sessionFile, serialize($sessionInfo));
}
public function getSession($key)
{
return $this->getSessionInfo()[$key];
}
private function getSessionInfo()
{
if(!is_dir($this->_sessionPath))
{
mkdir($this->_sessionPath);
}
$sessionFile = "{$this->_sessionPath}/{$this->_sessionId}";
if(is_file($sessionFile)) {
$contents = file_get_contents($sessionFile);
return unserialize($contents);
}
return [];
}
private function checkSession($sessionId)
{
$sessionFile = "{$this->_sessionPath}/{$sessionId}";
if(is_file($sessionFile)) {
return true;
}
return false;
}
}
使用方法如下 $session = new Session();
$session->setSession('a', 'b'); //第二次访问时注释掉这行,验证下一行$session->getSession('a')输出的内容是否正确
var_dump($session->getSession('a'));
|