【问题标题】:End Session in PHP [duplicate]在 PHP 中结束会话 [重复]
【发布时间】:2013-09-13 08:32:07
【问题描述】:

我在结束会话时遇到问题,我在我的会话开始的地方有 MAIN.PHP,在我的 MAIN.php 中我有<a href = "logout.php">logout</a> 这是我的 logout.php 的代码

<?php
 unset($_SESSION['user']);
 unset($_SESSION['pass']);
 session_destroy();
 echo"<script> window.location.href = '../index.php' ; </script>";
 exit();
 ?>

单击链接注销后,当我按下后退按钮时,我仍然可以访问页面并且它仍然保存我的 SESSION 变量。

【问题讨论】:

  • 点击上一个按钮后刷新还能用吗?
  • 您可能需要考虑设置 Location: 标头 Header("Location: _url_") 与 JavaScript 重定向。无需让客户端立即召回服务器。只需在销毁会话后重定向它们。应该是 302 如果你对 HTTP 代码感兴趣的话。
  • 是的,它还在工作。
  • @war10ck 即使当我按下返回时我仍然使用标题,我也可以访问我的 php。
  • 所有复制者请阅读帖子和cmets,这不是常规的“后退按钮”问题。

标签: php


【解决方案1】:

您可能也想在其中添加session_start()

session_start();
unset($_SESSION['user']);
 unset($_SESSION['pass']);
 session_destroy();
 header('Location: index.php');

另外,我个人更喜欢像unset($_SESSION);那样取消设置整个会话,但每个人都有自己的做事方式

【讨论】:

  • 当我按下返回时我仍然可以访问
【解决方案2】:

我会大胆地说this answer会解决你的问题。

根据PHP Docs For session_destroy()

session_destroy() 销毁与当前会话关联的所有数据。它不会取消设置任何与会话关联的全局变量,或取消设置会话 cookie。要再次使用会话变量,必须调用 session_start()。

为了完全终止会话,例如注销用户,还必须取消设置会话 ID。如果使用 cookie 传播会话 id(默认行为),则 必须删除会话 cookie。 setcookie() 可以用于此。

总结一下似乎是您的问题,讨厌的会话 cookie(标识会话)没有被取消设置。因此,当您点击后退按钮并且session_start(); 出现在脚本顶部时,仍会引用全局会话变量。正如另一个答案所暗示的,尝试:

$_SESSION = array();

清除所有全局会话数据。此外,正如文档所说,取消设置会话 cookie。

【讨论】:

  • 谢谢你,如果我很难搜索相关的标题,我很抱歉。
  • @user2761456 好伙伴。我们都还在学习。这就是 Stack Overflow 的优点。它有一些隐藏的宝石,可以真正解决一些大问题。有时很难找到它们。不用担心人。祝你好运,编码愉快! :)
猜你喜欢
  • 1970-01-01
  • 2017-07-18
  • 2013-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多