【发布时间】:2010-10-06 23:24:22
【问题描述】:
全部,
这个问题可能有一个非常简单的答案 - 我忽略了一些东西。但也许有人可以告诉我在哪里看...
我有一个 PHP 页面(“index.php”),其中包含一个非常简单的登录表单(例如,用户名和密码)。
当用户单击“提交”按钮时,表单会将值发布到另一个 PHP 页面(“login.php”)。该页面应该确认用户的凭据,然后执行以下操作:
- 如果用户的凭据不是 正确,将用户重定向到 error.php,以及一个错误 留言
- 如果用户的凭据是 正确,创建一个会话并设置 $_SESSION['authenticated'] = true,然后将他重定向到“loggedin.php”
[更新]
然后,在 login.php 上,我检查 isset($_SESSION['authenticated']) 返回 true。如果是,则继续。如果没有,将用户重定向回 index.php。
但是,这就是发生的事情。 FIRST 我填写表单(使用有效凭据)并提交时,我可以在 URL 栏中简要看到用户被发送到 login.php,然后是 login.php,但随后 返回到 index.php。
但是,如果我重新输入 相同 凭据并在 SECOND 次提交信息,一切都会正常运行。
所以,简而言之,看起来 login.php 在第一次通过时没有设置 $_SESSION 变量,或者确实如此,但由于某种原因,当我第一次登录时检查它时没有设置.php
在 login.php 上设置变量和在 login.php 上让 isset() 返回 true 之间是否有一些延迟?
或者,还有什么我做错了吗?
以下是相关的(我认为)sn-ps 代码:
在 login.php 中:
session_start();
$_SESSION['authenticated'] = true;
header('Location: http://www.mydomain.com/loggedin.php');
在login.php中:
session_start();
$authenticated = $_SESSION['authenticated'];
if (!isset($authenticated)) {
header('Location: http://www.footballpoolz.com/mobile/index.php');
die();
}
非常感谢您提供任何建议或见解!
干杯, 马特·斯图勒
【问题讨论】:
-
如果有人在没有设置正确凭据的情况下被发送到 level1.php 或 level2.php 会发生什么?也许这些页面中有一些东西正在重定向。
-
您能否提供任何代码,以便我们查看到底发生了什么?
-
webbiedave - 哇 - 你的洞察力很准确......发生了什么......用户到达 login.php;证件有效;创建了一个会话,我设置了 $_SESSION['fp_user_authenticated'] = true;用户被重定向到 level1.php。这一切都应该如此。然而,level1.php 做的第一件事是检查 isset($_SESSION['authenticated'])。如果返回 false,用户将被重定向回 index.php。显然,这是第一次发生的事情。换句话说,要么 login.php ISN'T setting $_SESSION['authenticated'],要么 level1.php 过早地检查它?