使用memcached的PHP会话。会话_destroy()不删除memcache项
使用memcached处理会话时,我的行为非常奇怪。 看起来我的用户正在共享会话,没有任何原因 用例: 我已登录,正在获取“xxx”的PHPSESID。毫无理由,另一台计算机上的另一个用户会得到相同的PHPSESSID,当然也会看到我的个人资料和所有其他会话数据 从您的头脑中,会话_start()发出已创建的sessiond的原因可能是什么 经过数小时的调试,我注意到唯一一件“奇怪”的事情是“注销”操作没有删除该会话的memcached条目使用memcached的PHP会话。会话_destroy()不删除memcache项,php,session,memcached,Php,Session,Memcached,使用memcached处理会话时,我的行为非常奇怪。 看起来我的用户正在共享会话,没有任何原因 用例: 我已登录,正在获取“xxx”的PHPSESID。毫无理由,另一台计算机上的另一个用户会得到相同的PHPSESSID,当然也会看到我的个人资料和所有其他会话数据 从您的头脑中,会话_start()发出已创建的sessiond的原因可能是什么 经过数小时的调试,我注意到唯一一件“奇怪”的事情是“注销”操作没有删除该会话的memcached条目 // Resume session. session
// Resume session.
session_start();
// Unset all session data.
$_SESSION[V::$SESS_NAME] = array();
// Kill session cookie.
if(ini_get('session.use_cookies'))
{
$params = session_get_cookie_params();
// Send this cookie to the past. Time travel - possible!
setcookie(session_name(), '', time() - 42000, $params['path'], $params['domain'], $params['secure'], $params['httponly']);
}
// Destroy the session.
session_destroy();
//恢复会议。
会话_start();
//取消设置所有会话数据。
$\会话[V::$SESS\U名称]=数组();
//杀死会话cookie。
if(ini_get('session.use_cookies'))
{
$params=会话获取cookie参数();
//将此cookie发送到过去。时间旅行-可能!
setcookie(session_name(),'',time()-42000,$params['path'],$params['domain'],$params['secure'],$params['httponly']);
}
//销毁会话。
会话_destroy();
其他人在使用PHP memcached会话时是否也经历过类似的行为
谢谢,
Mikememcached和PHP的会话函数(如
session_destroy()
)不相关session\u destroy()
只结束一个PHP会话;它与memcached无关。如果您还想删除memcached条目,则需要显式删除。经过一些调试后,我确定了问题,这是由Varnish引起的。显然,页面正在缓存标题
边缘情况:
- 用户A来到网站,请求新鲜(无cookie),得到一个清漆未命中,得到一个会话cookie。登录了
- 用户B来到网站,请求新鲜(没有cookies),得到一个点击。Varnish发送先前兑现页面的标题(带有设置Cookie)。用户B获得会话id为用户a的会话cookie。用户B自动登录到用户a配置文件
很抱歉没有指出,该堆栈已运行清漆。在深入调试之前,我自己并不知道。Hm。。。因此,session_start()会将memc.sess.key.SESSIONID添加到memcached,写入$_session会将值写入memc.sess.key.SESSIONID,但是session_destroy()不会从memcached中删除memc.sess.key.SESSIONID?如果这是真的,你是否从经验中知道这一点,或者我是否有可以读取的链接?@userfuser set cookie header不会进入缓存,命中时也不会返回响应。在我的情况下,Varnish也是罪魁祸首。但对我来说,Varnish显然也在缓存烹饪过的页面,因为在浏览器中PHP会话在那里停留了一会儿,然后消失了,然后又回来了一会儿。禁用清漆后,问题消失了。