Redis作为PHP session容器
关于session_start()
在php使用session需要先调用session_start()
函数,session_start()
会做下面几件事:
默认情况下,php将session保存在文件中,存放路径可在php.ini
中的session.save_path路径设置。
PHP提供的session_set_save_handler函数允许开发者将session保存不在不同的容器中:mysql
, redis
…
将session存到Redis
修改php.ini
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379"
ini_set()
ini_set("session.save_handler", "redis");
init_set("session.save_path", "tcp://127.0.0.1:6379");
SessionHandlerInterface
PHP5.4版本提供了一个SessionHandlerInterface
接口,用来实现session handler。
class RedisSessionHandler implements SessionHandler{
public function __constructor(){
$this->redis = new Redis();
}
//下面的方法还需要具体实现
public bool close (void){
}
public bool destroy ($session_id ){
}
public bool gc (maxlifetime ){
}
public bool open ($save_path, $name ){
}
public string read ($session_id ){
}
public bool write ($session_id, $session_data ){
}
}
$handler = new RedisSessionHandler();
session_set_save_handler($handler, true);
session_start();
上面说到,默认情况下session文件存放在session.save_path指定的目录下,文件名为session_name()
:session_id()
的文件。在Redis中,session被存为key为session_name()
:session_id()
的String类型, 内容为$_SESSION数组序列化后的字符串。