PHP - 为啥我不能摆脱这个会话 id cookie?
Posted
技术标签:
【中文标题】PHP - 为啥我不能摆脱这个会话 id cookie?【英文标题】:PHP - why can't I get rid of this session id cookie?PHP - 为什么我不能摆脱这个会话 id cookie? 【发布时间】:2011-04-28 17:01:18 【问题描述】:我正在尝试对 Web 应用的注销功能进行故障排除。当您登录时,该应用程序为其域设置了多个 cookie。这是当前的注销过程:
您单击一个链接,该链接会将您转到注销页面 注销页面运行一个调用session_destroy()
的函数,并循环访问该域的所有 cookie 并将它们设置为在过去过期(参见下面的代码)
然后注销页面重定向到登录页面,该页面是纯 html。
在此过程结束时,所有其他 cookie 都未设置,但 phpSESSID
cookie 仍然存在,具有相同的值,并且仍然设置为在会话结束时过期。
我错过了什么?
这是我上面提到的注销功能:
function log_out_current_user()
// Destroy the session
if (isset($_SESSION))
session_destroy();
// Expire all of the user's cookies for this domain:
// give them a blank value and set them to expire
// in the past
if (isset($_SERVER['HTTP_COOKIE']))
$cookies = explode(';', $_SERVER['HTTP_COOKIE']);
foreach($cookies as $cookie)
$parts = explode('=', $cookie);
$name = trim($parts[0]);
setcookie($name, '', time()-1000);
setcookie($name, '', time()-1000, '/');
// Explicitly unset this cookie - shouldn't be redundant,
// but it doesn't hurt to try
setcookie('PHPSESSID', '', time()-1000);
【问题讨论】:
【参考方案1】:您不会使用与创建它相同的参数来删除它。使用session_get_cookie_params
获取这些。为了便于携带,您应该通过session_name
获取cookie 的名称。这是一个执行此操作的小脚本:
$params = session_get_cookie_params();
setcookie(session_name(), '', 0, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));
【讨论】:
这是我在这个主题中发现的最有用的东西。事实证明我在路径中缺少一个字符。这可以处理所有工作并防止您犯错误。谢谢!以上是关于PHP - 为啥我不能摆脱这个会话 id cookie?的主要内容,如果未能解决你的问题,请参考以下文章
为啥不使用长寿命会话 ID 来代替带有令牌的持久 cookie?