【问题标题】:Truly destroying a PHP Session?真正破坏 PHP 会话?
【发布时间】:2010-10-05 06:28:19
【问题描述】:

我听到了关于这个话题的不同反应,那么什么是破坏 PHP 会话的可靠方法呢?

session_start();
if(isset($_SESSION['foo'])) {
   unset($_SESSION['foo'];
   ...
}
session_destroy();

在最简单的情况下,这足以真正终止用户和服务器之间的会话吗?

【问题讨论】:

标签: php session


【解决方案1】:

要销毁会话,您应该采取以下步骤:

  • 删除会话数据
  • 使会话 ID 无效

为此,我会使用这个:

session_start();
// resets the session data for the rest of the runtime
$_SESSION = array();
// sends as Set-Cookie to invalidate the session cookie
if (isset($_COOKIE[session_name()])) { 
    $params = session_get_cookie_params();
    setcookie(session_name(), '', 1, $params['path'], $params['domain'], $params['secure'], isset($params['httponly']));
}
session_destroy();

为了确保会话 ID 无效,您应该只允许由脚本启动的会话 ID。所以设置一个标志并检查它是否设置:

session_start();
if (!isset($_SESSION['CREATED'])) {
    // invalidate old session data and ID
    session_regenerate_id(true);
    $_SESSION['CREATED'] = time();
}

此外,您可以使用此时间戳定期交换会话 ID 以缩短其生命周期:

if (time() - $_SESSION['CREATED'] > ini_get('session.gc_maxlifetime')) {
    session_regenerate_id(true);
    $_SESSION['CREATED'] = time();
}

【讨论】:

  • 我知道这已经过时了,但你对我的回答就像 3 个问题一样。谢谢!
  • 在第 5 行的第一个示例中,应该是 $_COOKIES 而不是 $_COOKIE,否则您可能想知道为什么它从不破坏会话 cookie,因为 isset($_COOKIES[session_name()]) 永远不会评估为 true。
  • @Gumbo 按照您的建议,终于可以删除会话 cookie...无论如何,最近有什么方法可以做到吗?
【解决方案2】:

PHP 手册解决了这个问题。

您需要终止会话并删除会话 cookie(如果您正在使用 cookie)。

查看此页面(尤其是第一个示例):

http://us2.php.net/manual/en/function.session-destroy.php

【讨论】:

    【解决方案3】:

    在我创建的一个使用 PHP 会话的站点中,我从未真正销毁会话。

    问题是您几乎必须调用session_start() 来检查您的$_SESSION 变量,此时您瞧,您已经创建了另一个会话。

    因此,在我的网站上,我只是确保每个页面调用session_start(),然后只是unset() 会话状态的那些部分在用户注销时很重要。

    【讨论】:

    • 感谢 Alnitak 的输入,这是我怀疑在每个页面上调用 session_start() 的原因。我将继续取消设置使用的变量。
    【解决方案4】:
    $_SESSION = [];
    @unset($_COOKIE[session_name()]);
    session_destroy();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-10
      • 1970-01-01
      • 2013-10-31
      • 2016-04-30
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 2015-12-09
      相关资源
      最近更新 更多