【发布时间】:2016-10-20 12:31:13
【问题描述】:
这令人沮丧,我已经使用 PHP Sessions 很长时间了,直到现在还没有遇到过这个问题。我正在使用 PHP 编写一个基本的登录/注销脚本。
这是我的注销脚本。
logout.php
<?php
session_start();
unset($_SESSION['email']);
session_destroy();
header("Location:login.php");
?>
因此我的 login.php 脚本具有以下代码:
login.php
// I send the user to logged_in.php if the session already exists.
if(isset($_SESSION['email'])) header("Location:logged_in.php");
if(pass and username are correct){
$_SESSION['email'] = $email;
session_write_close();
header('Refresh: 1; logged_in.php');
}
现在,当我登录并被重定向到 logged_in.php 页面时,当我转到 logout.php 页面时会在那里形成,而不是被重定向到 >login.php 它返回到 logged_in.php。
这意味着当它到达 login.php 时会话仍然存在并且它在 login.php
中输入以下 if 语句if(isset($_SESSION['email'])) header("Location:logged_in.php);
【问题讨论】:
-
你必须在
unset($_SESSION['email'];处错过括号 -
哦,这只是粘贴代码时的拼写错误。文本编辑器中的语法都是正确的。
-
你访问
login.php时是否总是被重定向(独立有没有会话,尝试删除所有php-session文件并在浏览器地址栏直接访问login.php)? .. 这是一个奇怪的建议,可能是你在if-statement之后有额外的分号,比如:if (isset($_SESSION['email'])); header('Location: logged_in.php');?根据您的消息来源,即使没有session_start(),您也已被重定向,但如果您尚未初始化它,则不能存在$_SESSION全局变量。我猜在这种情况下您无法永久登录。