基本操作
//启动session
session_start();
//存取session
$data = $_SESSION[$key];
$_SESSION[$key] = $val;
//删除session
unset($_SESSION[$key]);
//获取sessionid
session_id();
//设置sessionid
session_id($id);
//获取session存储路径
session_save_path();
//设置session存储路径
session_save_path($path);
判断session是否启动
function is_session_started()
{
if ( php_sapi_name() !== 'cli' ) {
if ( version_compare(phpversion(), '5.4.0', '>=') ) {
return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
} else {
return session_id() === '' ? FALSE : TRUE;
}
}
return FALSE;
}
销毁所有session
// 重置会话中的所有变量
session_unset();
// 删除sessionid
if (ini_get("session.use_cookies")) {
$params = session_get_cookie_params();
setcookie(session_name(), '', time() - 42000,
$params["path"], $params["domain"],
$params["secure"], $params["httponly"]
);
}
// 最后,销毁会话
session_destroy();
配置使用memcache来存取session(默认为文件)
ini_set('session.save_handler', 'memcache'); //设置session方式,需在session_start之前
ini_set('session.save_path', 'tcp://127.0.0.1:11211'); //设置session保存路径,需在session_start之前
session_start();
自定义session存储
在php配置中设置session.save_handler 为 'user'
用bool session_set_save_handler (SessionHandlerInterface $sessionhandler [, bool $register_shutdown = true ] ) 设置自定义的session处理类
例如自定义使用memcache存session
class MySession implements \SessionHandlerInterface
{
private $_memcache;
public function open($savePath, $sessionName)
{
$this->_memcache = new \Memcache();
$matchs = array();
preg_match('/tcp:\/\/(.*):(.*)/', $savePath, $matchs);
return $this->_memcache->connect($matchs[1], (int)$matchs[2]);
}
public function close()
{
$this->_memcache->close();
return true;
}
public function read($id)
{
return $this->_memcache->get($id);
//return (string)@file_get_contents("$this->savePath/sess_$id");
}
public function write($id, $data)
{
return $this->_memcache->set($id, $data);
//return true;
//return file_put_contents("$this->savePath/sess_$id", $data) === false ? false : true;
}
public function destroy($id)
{
return $this->_memcache->delete($id);
//return true;
}
public function gc($maxlifetime)
{
/*
foreach (glob("$this->savePath/sess_*") as $file) {
if (filemtime($file) + $maxlifetime < time() && file_exists($file)) {
unlink($file);
}
}
*/
return true;
}
}
ini_set('session.save_handler', 'user');
ini_set('session.save_path', 'tcp://127.0.0.1:11211');
session_set_save_handler(new MySession());