【问题标题】:Session destroy会话销毁
【发布时间】:2011-11-25 00:29:35
【问题描述】:

在我的工作平台中,我遇到了 session_destroy 问题

function logout()
{

 $_SESSION['id'] = '';
 session_destroy();

}

这里我将会话 id 变量设置为空值,并使用 session_destroy() 函数销毁会话。

但问题是,从我的帐户注销后,当我按下浏览器的返回按钮时,它会显示状态为已登录即使我也可以浏览我帐户的个人资料和链接

谢谢

【问题讨论】:

  • session_destroy() 上的手册显示了如何完全销毁会话(尽管您的可能是一个缓存问题)
  • 尝试使用$_SESSION = array(); 而不是$_SESSION['id'] = '';
  • 也许这个帖子会对你有所帮助 - stackoverflow.com/questions/1037249/…

标签: php session


【解决方案1】:

您必须取消设置会话以及销毁会话才能将其从系统中完全删除。

你可以用 php 函数来做到这一点..

session_unset(); or you can use unset($_SESSION);
session_destroy();

【讨论】:

  • 你不应该使用 unset($_SESSION) - PHP 手册明确规定不要使用。
  • 警告:不要使用 unset($_SESSION) 取消设置整个 $_SESSION,因为这将禁用通过 $_SESSION 超全局注册会话变量。 php.net/manual/en/session.examples.basic.php
【解决方案2】:

它认为你应该尝试使用session_unset()

为了完全终止会话,例如注销用户,还必须取消设置会话 ID。

如果使用 cookie 传播会话 id(默认行为),则必须删除会话 cookie。 setcookie() 可以用于此

<?php
session_start();

$sessionName = session_name();
$sessionCookie = session_get_cookie_params();

session_unset();
session_destroy();

setcookie($sessionName, false, $sessionCookie['lifetime'], $sessionCookie['path'],    $sessionCookie['domain'], $sessionCookie['secure']);
?>

【讨论】:

    【解决方案3】:

    试试这个:

    unset($_SESSION);
    session_destroy();
    session_regenerate_id();
    

    【讨论】:

    【解决方案4】:

    尝试使用 Zend_Session,而不是滚动您自己的会话代码并可能遗漏一些东西:

    http://framework.zend.com/manual/en/zend.session.html

    Zend_Session_Namespace 的构造函数会自动调用 session_start(),同样 Zend_Session::destroy() 方法会在注销脚本中清理所有内容。大部分工作已经为您完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-25
      • 2011-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多