我正在建立登录系统,但是当用户登录时,它实际上并不存储我希望它在会话中的任何数据.我甚至检查了会话的文件,它是空的.我有session_start(); 在所有页面上.还有什么我可能做错了.下面是两个主要页面的代码.
登录代码:
<?
if ($DEBUG == true) {
error_reporting(E_ALL);
}
require "header.php";
require_once "dbinterface.php";
require_once "user.class.php";
require_once "config.inc.php";
$db = new db($DB['host'], $DB['user'], $DB['pass'], $DB['database']);
$u_result = $db->run("select user_id from users where user_name = '" . $db->escape($_POST['user_name']) . "'");
if ($u_result == false) {
$url = 'Location: error.php?id=8';
header($url);
}
if (count($u_result) < 1) {
$url = 'Location: error.php?id=3';
header($url);
}
$user = new user($u_result[0]['user_id']);
if ($user->match_password($_POST['pass']) == true) {
$_SESSION['authenticated'] = true;
$_SESSION['user_id'] = $u_result[0]['user_id'];
$_SESSION['user'] = $user;
} else {
$url = 'Location: error.php?id=4';
header($url);
}
session_write_close();
header('Location: index.php');
?>
Run Code Online (Sandbox Code Playgroud)
每个页面都包含的标题:
<?php
if (!session_start()) {
$url = "Location: error.php?id=13";
header($url);
}
?>
Run Code Online (Sandbox Code Playgroud)
一点背景:
Pas*_*TIN 11
这里有几个建议(我真的不知道发生了什么和/或为什么;所以他们只是建议;也许一个人会解决问题^^).
首先,有几个问题:(
至少如果这些建议都不起作用,它们至关重要)
var_dump($_SESSION); die;在会话中设置数据的脚本末尾的内容,它会给出什么?第一个想法:如果你设置一些标题来禁用浏览器的缓存怎么办?
像这样的东西,例如:
session_start();
header("Cache-control: private");
Run Code Online (Sandbox Code Playgroud)
第二个想法(至少如果你在Windows上):你试过禁用你的防病毒/防火墙吗?
是否在客户端的浏览器中正确创建了会话cookie?
如果您正在使用子域(或不使用):cookie的域是否正常?它的失效日期怎么样?
第三个想法:
error_reporting是设置的E_ALL,这很好display_errors?它是否设置为On以便显示错误?error_log吗?
另一个:你确定在绝对之前没有任何东西可以输出到输出session_start吗?甚至没有白色空间?
还有一个:您确定目录/文件的权限吗?
会话目录以及创建的(空)文件的权限是什么?
我开始没有想法......运气好的话,也许其中一个会是正确的......或者帮助你找出合适的人选!
祝好运 !
可能的原因是在标题('Location ...')语句之后继续执行.但是看起来你希望它停止,所以你应该添加'exit;' 重定向到error.php后.例如:
if ($u_result == false) {
$url = 'Location: error.php?id=8';
header($url);
exit;
}
Run Code Online (Sandbox Code Playgroud)
这也可能是你问题的一部分,因为你永远不会去error.php并看到错误代码.最后一行总是执行:
header('Location: index.php');
Run Code Online (Sandbox Code Playgroud)
而且由于header()的默认行为是替换现有的头文件,所以无论如何都总是转到index.php.
| 归档时间: |
|
| 查看次数: |
14107 次 |
| 最近记录: |