2

我似乎突然遇到了一个奇怪的问题,我希望有人可以提出建议......

我有一个登录脚本,如果登录失败,它应该注册一个包含错误消息的会话变量,然后将用户重定向到他们来自的页面。例如,用户可能在 index.php 上使用了论坛,但登录失败,他们将返回到 index.php,其中的脚本会显示会话变量中包含的错误消息。

但是,会话变量似乎没有保存。作为记录,我在登录脚本中使用 session_start() 以及任何具有登录表单的页面,如果用户因登录失败而返回该页面,则该页面应显示错误消息。

我的脚本如下:

if (isset($_POST['prev'])) {
  $prev = $_POST['prev'];
}
else {
  $prev = "login.php";
}
$_SESSION['Login_Error'] = $error;
header("Location: $prev");

那么表单页面上的脚本是:

if (isset($_SESSION['Login_Error'])) {
  echo $_SESSION['Login_Error'];
}

我得到的错误是:

Notice: Undefined index: Login_Error in F:\EasyPHP-12.0\www\index.php on line 3

关于为什么不保存的任何想法?如果登录成功,脚本会设置一个工作正常的用户 ID 会话变量。感谢您的任何建议。

4

3 回答 3

4

我以前遇到过这个问题。如果在用户打开时设置了会话变量

www.domain.com/login.php

并且用户被重定向到

domain.com/index.php(开头没有 www.)

会话变量将不可访问。确保 www. 要么总是在那里,从不在那里,要么你的脚本是否使用它,具体取决于具体情况。

于 2013-09-16T22:45:19.260 回答
1

在更远的某个时间点,如果你有:unset($_SESSION['Login_Error'])或类似的...... 例如$_SESSION['Login_Error'] = null..这可能会导致问题。

这是因为在发送要重定向的标头之后 - php 脚本的其余部分继续执行。

如果您在标头之后放置 adie()exit().. 这应该会停止脚本的其余部分执行,因此,请确保 var 在脚本下方的任何位置都没有取消设置。

希望这可以帮助。

于 2013-03-25T21:51:57.863 回答
0

您需要在声明会话变量之前启动会话:

http://php.net/manual/es/function.session-start.php

在慢速机器上也有一个错误,目前无法保存会话变量。

尝试使用超时标头:

header("refresh:3;url=".$prev);

在http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Refresh上查看有关刷新标头的更多信息

于 2013-06-06T21:22:01.760 回答