【问题标题】:Deleting session cookies with PHPPHP删除会话cookie?
【发布时间】:2016-06-17 03:15:20
【问题描述】:

这是我需要做的: 删除所有会话 cookie 并销毁服务器上的会话。 从浏览器中删除会话 cookie。

<?php
session_start();
$name = session_name();
$expire = strtotime('-1 year');
$params = session_get_cookie_params();
$path = $params['path'];
$domain = $params['domain'];
$secure = $params['secure'];
$httponly = $params['httponly'];
setcookie($name, '', $expire, $path, $domain, $secure, $httponly);
unset($_SESSION["course_code"]);
unset($_SESSION["course_name"]);
unset($_SESSION["publisher"]);
session_unset();
session_destroy();

?>

这是否正确地完成了需要做的事情?

【问题讨论】:

  • 如果你想取消设置所有的值,你可以运行session_destroy()。它将取消设置所有值并销毁会话。
  • 但是$_SESSION 数组在session_destroy() 之后仍然可以在同一页面中工作。然后你可以简单地运行$_SESSION = array() 来重置它的内容。
  • 可能的重复删除请求 - 它不包括会话破坏,只有 cookie。在这里,作者要求提供会话和 cookie
  • @Phiter :正如下面正确引用手册中的答案,session_destroy() 确实 NOT 删除会话 cookie。

标签: php session cookies


【解决方案1】:

给你,需要循环删除:

//when dealing with session always add session_start() on top
session_start();
//From PHP manual: Unset all of the session variables.
//No need to do in a loop for all $_SESSION[] keys
$_SESSION = array();

//For cookies you do similar, from PHP docs:
//http://php.net/manual/en/function.setcookie.php#73484

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, '/');
    }
}
session_destroy();

PS:来自 PHP 手册:

仅将 session_unset() 用于不推荐使用的旧代码 $_SESSION。所以不要使用它。 session_destroy() 销毁所有 与当前会话关联的数据。它不会取消任何 与会话关联的全局变量,或取消设置会话 饼干。

为了安全起见,在登录、注销和脚本的敏感区域时调用session_​regenerate_​id()

【讨论】:

  • 循环不是必须的,你可以使用 unset($_SESSION);
  • 只需在顶部添加 session_start() 并添加我的代码,没有别的
  • 你需要 session_start(),除此之外,就像 Phiter 说的,session_destroy() 会为你做这一切。
  • 好的,我只需要 session_start() 和 session_destroy() 还是需要更多?
  • 你需要循环执行的cookies
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-27
  • 2013-09-12
  • 2010-12-18
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
相关资源
最近更新 更多