我无法解决/只能部分解决的非常烦人的问题。多汁的一款适合您的专业人士。
我已经建立了一个基本的登录系统。像这样:
登录.php:
- 第 1 行:
session_start();
- 检查
if($_SESSION['logged_in'] == true) header("Location: /controls.php);
,如果他们已经输入了他们的详细信息。 - 如果他们尚未输入,用户输入凭据(如果有效):
$_SESSION['logged_in'] = true;
- 检查数据库凭据并将会话设置为 true 后,使用 PHP 重定向
header("Location: /controls.php);
请记住,会话现已设置。
控制.php
- 第 1 行:
session_start();
- 第 2 行:
if($_SESSION['logged_in'] != true) {header("Location: /index.php");}
立即我被带到 index.php 只有在 Chrome 和 Firefox 中。
另外,我有accounttools.php
,再次需要会话。一旦我尝试访问accounttools.php
,会话就会被破坏/取消设置,并且任何尝试加载都会accounttools.php
导致标题重定向到我的 /index.php 页面,再次仅在 Firefox 和 CHROME 中。
我还得补充一点。如果我返回login.php
并重新登录,一切正常,会话设置正确。这是基于浏览器的错误吗?PHP 在任何数据发送到浏览器之前执行,那么如果 PHP 在到达用户时已经执行,那么这些浏览器到底有什么不同的行为呢?
登录文件:
// Login.php
<?php session_start();
if($_SESSION['logged_in'] == true)
{
header("Location: /controls.php");
exit();
}
if($_POST['username_login'] && $_POST['password_login'])
{
// Do necessary database work to check credentials (edited out here).
// ...
// Check re-hashed pass against database hash (password checking)
if($make_password == $current_user[0]['password'])
{
// If this is OK login is a success.
$_SESSION['logged_in'] = true;
header("Location: /controls.php");
exit();
}
}
?>
控制文件:
// controls.php
// This page instantly redirects to index.php
<?php session_start();
// Go to homepage if logging out.
if($_POST['logging_out'])
{
unset($_SESSION['logged_in']);
header("Location: /index.php");
exit();
}
// No access unless logged in.
// This session seems to no longer exist at this point. Why??
if($_SESSION['logged_in'] != true)
{
header("Location: /index.php");
exit();
}
?>
编辑:我发现了别的东西:如果我登录并手动输入$_SESSION
-restricted 页面的 URL,$_SESSION
则不会被破坏。
header() 重定向的某些部分导致 th$_SESSION
在 Google 和 Mozilla 中被取消设置/销毁。
我也疯狂地在谷歌上搜索,显然这是 PHP 编码人员中的一个常见问题。一定有人知道这是什么?