准备工作参考以前的博客安装redis、安装phpredis。
具体代码
ini_set('session.save_handler', 'redis');
ini_set('session.save_path', 'tcp://127.0.0.1:6379');
session_start();
$_SESSION['sessionid'] = 'this is session content!';
echo $_SESSION['sessionid'] . "\n";
在命令行上运行此脚本后,会打印
进入到redis,输入图中命令也能发现session数据已存入
若是redis配置了密码,只需'tcp://127.0.0.1:6379?auth=authpwd'(注:authpwd为redis密码),尤其要注意的是要查看phpredis的版本,版本低的话会报错,我的就报了“Warning: Unknown: Failed to write session data (redis). Please verify that the current setting of session.save_path is correct (tcp://127.0.0.1:6379?auth=test) in Unknown on line 0”,后来升级了之后便好了。
[updated] 自定义redis的session类
class Redis_Session implements SessionHandlerInterface
{
private $handle;
private $lifetime;
private $prefix = 'TESTSID:';
/**
* open session
* @param string $save_path
* @param string $session_name
* @return bool
*/
public function open($save_path, $session_name)
{
$this->handle = new redis;
$this->handle->connect('127.0.0.1', '6379');
$this->lifetime = ini_get('session.gc_maxlifetime');
return true;
}
/**
* close session
* @return bool
*/
public function close()
{
$this->gc($this->lifetime);
$this->handle->close();
$this->handle = null;
return true;
}
/**
* read session by session_id
* @param string $session_id
* @return mixed
*/
public function read($session_id)
{
$session_id = $this->prefix . $session_id;
$data = $this->handle->get($session_id);
$this->handle->expire($session_id, $this->lifetime);
return $data; // todo php7 此处应改为 is_string($data) ? $data : '';
}
/**
* write session by session_id
* @param string $session_id
* @param string $session_data
* @return mixed
*/
public function write($session_id, $session_data)
{
$session_id = $this->prefix . $session_id;
$this->handle->set($session_id, $session_data);
return $this->handle->expire($session_id, $this->lifetime);
}
/**
* delete session_id
* @param string $session_id
* @return mixed
*/
public function destroy($session_id)
{
return $this->handle->rm($this->prefix . $session_id);
}
/**
* this function is no use because of redis expire
* @param int $maxlifetime
* @return bool
*/
public function gc($maxlifetime)
{
return true;
}
}
$handler = new Redis_Session();
session_set_save_handler($handler, true);
session_start();
$_SESSION['id'] = 1;
echo $_SESSION['id'];