如何删除PHPSESSID会话Cookie 实现用户登出功能
实现登出功能的解决方案
一、推荐:PHP后端实现(最稳妥,不受Cookie属性限制)
PHP原生会话机制完全适配你的场景,可解决会话Cookie无法删除的问题,是安全性最高的实现方案。
实现步骤
- 新建
logout.php文件,写入以下代码:
<?php // 开启会话 session_start(); // 1. 清空当前会话的所有存储数据 $_SESSION = array(); // 2. 删除PHPSESSID Cookie,自动匹配原有Cookie的属性避免删除失败 if (ini_get("session.use_cookies")) { $params = session_get_cookie_params(); setcookie( session_name(), // 自动适配你的PHPSESSID名称 '', time() - 42000, // 设置为过去的时间触发浏览器自动删除 $params["path"], $params["domain"], $params["secure"], $params["httponly"] ); } // 3. 销毁当前会话 session_destroy(); // 跳转到登录页 header('Location: index.php'); exit; ?>
- 前端登出按钮直接关联该地址即可,示例代码:
<a href="logout.php"><button>退出登录</button></a>
注:之前删除Cookie失败的核心原因是删除时的path、domain等参数和PHP自动创建PHPSESSID时的参数不匹配,以上代码直接读取PHP会话的默认Cookie参数,完全匹配不会失效。
二、JavaScript前端实现方案(有前置限制)
仅当PHPSESSID未设置HttpOnly属性时可使用该方案,HttpOnly是PHP默认开启的安全配置,禁止前端脚本操作会话Cookie,避免XSS攻击窃取登录态,因此该方案通用性较低。
删除单条PHPSESSID代码
document.cookie = "PHPSESSID=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
一次性删除所有Cookie代码
document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });
注:如果Cookie设置了子域名、特定路径、Secure属性,需要对应补充属性才能删除成功。
三、PHP一次性删除所有Cookie的方法
如果需要清空当前域名下的所有Cookie,可以在logout.php的session_destroy执行前加入以下代码:
foreach ($_COOKIE as $key => $value) { setcookie($key, '', time() - 3600, '/'); }
额外建议
你现有代码中直接拼接SQL语句存在SQL注入风险,建议改为预处理语句执行查询,避免被恶意攻击。
内容的提问来源于stack exchange,提问作者Somewhat32
相关产品推荐
相关产品推荐

