我的网站上有一个使用 $_SESSION 变量的 PHP 身份验证系统。
表单将用户名和密码提交到文件“login.php”。它是这样处理的:
<?php include '../includes/sessionstart.inc.php'; ?>
<?php ob_start(); ?>
if($_POST){
$q = mysql_query("SELECT id, company FROM users WHERE username = '".mysql_real_escape_string($_POST['username'])."' AND password = '".md5($_POST['password'])."'");
if(mysql_num_rows($q) >= 1){
$f = mysql_fetch_Array($q);
$_SESSION['company'] = $f['company'];
$_SESSION['id'] = $f['id'];
$_SESSION['logedin'] = true;
session_write_close();
ob_clean();
header("Location: index.php");
}
之后,加载 index.php 并检查 'logedin' 是否为真。
<?php include '../includes/sessionstart.inc.php'; ?>
<?php if(!isset($_SESSION['logedin'])) header('Location: login.php'); ?>
在我的生产服务器上,它继续,但在我的 Wampserver 上,它恢复到 login.php。我注意到 Wampserver 的页面加载速度非常慢,这可能与它有关。这就是我包含 session_write_close 的原因,以确保在切换页面之前保存会话数据,但这无济于事。
session_start.inc.php 的内容很简单:
<?php
session_start();
?>
我曾经在那里有更多的代码,但目前仅此而已。在我开始使用包含文件之前,这个问题也存在。
有人知道我做错了什么吗?为什么 Wampserver 不将我的 SESSION 数据传输到下一个 PHP 文件?