PHP的SESSION写入问题
是这样的,我现在打算用
memcache
来存储信息
这样实现的
write()
方法
class MemcacheHandler implements \SessionHandlerInterface
{
...
public function write($session_id, $session_data)
{
$mc = self::getMc();
file_put_contents('/tmp/sess_log', $session_id.'-'.$session_data.'-'.self::$config['expire'].PHP_EOL, FILE_APPEND); # 测试用
return $mc->set($session_id, $session_data, self::$config['expire']);
}
...
}
然后
php
session_set_save_handler(new MemcacheHandler(), true); #自己定义session处理 session_start(); # 开启session $_SESSION['uid'] = 123456; #写入数据
然后问题来了,分析
/tmp/sess_log
文件看出,将session数据写入memcache时,只写入了一次,当刷新页面的时候,并没有再次写入。这样的话,假设我用session来判断用户是否是登陆状态,那岂不是超过定义的时间之后,就自动掉线了?
如果我改成
$_SESSION['uid'] = 78965;
,这时却会再次写入。
google了下,没有找到答案,求各位大神解答一下,多谢了
Answers
按照你现在的写法确实会这样,建议你在session的数据里面加个过期时间,自己续吧。
ini_set('session.save_handler', 'memcached');使用这种方式有个问题,session的GC是系统控制的,你没办法在逻辑里面控制
下面是续session时长的思路
function write(){
$md->set("xxx",array("uid"=>"xxxx","expire_time"=>自己逻辑的过期时间),memcache数据过期时间 );
}
function read(){
$data = $md->get("xxxx");
if($data){
//sesion存在
$diffTime = time() - $data["expire_time"];
if($diffTime > 阀值){
//续session的时间
}
}
}
1:改时间戳试下
http://php.net/manual/zh/memcache.set.php
2:session不推介试用memcache存储 ,具体文章自己搜下 参见: memcache 作者 session 关键字
session存储在memcache不是配置一下的事情么?怎么变得这么麻烦了。
php使用 memcache 来存储 session