我现在已经学习了一点点PHP,而且大部分内容都非常简单 . 我唯一能做的就是让 Session 开始工作 . 谷歌在这方面的努力是无情的 .
这可能是两个原因之一;语法或我的软件 . 我目前正在使用EasyPHP 5.3.5.0在未连接到互联网的机器上构建本地网站 . 将其连接到互联网不是一种选择 .
我目前对会话的了解是,许多与之相关的语法已被弃用,取而代之的是超级全局 $_SESSION
数组,它更易于使用 . start_session();
必须在与会话相关的任何语法之前 . 但是,我的登录脚本没有 Build 会话,因为快速 !isset ($_SESSION['username'])
总是返回true .
我的脚本设置如下:
PHP包括login.php,这是一个表单 . check_login.php验证了它,如果查询返回一行,它将重定向到login_success.php,它 Build 会话,给出欢迎消息,然后重定向(使用JavaScript)到主页 .
有任何想法吗?
编辑以包含更多信息:
这是我的代码的概要:
index.php:
include 'main_login.php';
main_login.php:
if(!isset ($_SESSION['username'])){
...
Login form, action="cehcklogin.php" method="post"
...
}else{
var_dump ($_SESSION): // Just to see if it works
}
checklogin.php:
Connect to SQL
$username = $_POST['username'];
$password = $_POST['password'];
$username / $password stripslashes / mysql_real_escape_string
Query to find the username & password
$count = mysql_num_rows($result);
if($count = 1){
$_SESSION["username"] = $username;
$_SESSION["password"] = $password;
header("location:login_success.php");
}else{
echo "Wrong Username or Password."
}
login_success.php:
登录过程一直到这里,重定向到家,这就是问题所在 .
session_start();
var_dump($_SESSION); //This works
if(!isset ($_SESSION['username'])){
header("location:index.php");
}
Javascript redirect, and a welcome message appears.
这一切都有效,直到你到达主页,应该设置 $_SESSION['username']
,它不应该显示表格,但确实如此 .
2 回答
看起来你没有在你的main_login.php中使用
session_start()
,就像etranger所提到的那样 . 您需要在每个新请求开始时调用该函数以开始使用会话 .否则,如果您正在调用
session_start()
并且您只是忽略了在代码示例中显示它,那么在重定向期间可能会丢失会话ID . 您是使用基于cookie的会话还是将会话ID作为URL参数传递?尝试在每页顶部打印session_id()
或SID
. 这将告诉您会话何时丢失(会话ID将更改或“”) .如果你正在使用基于cookie的会话,那么cookie可能会因某种原因而丢失 . 如果您使用URL参数传递会话ID,那么透明的会话ID支持可能无法正常工作 .
你必须尽早调用
session_start()
,并且肯定在使用$_SESSION
之前,否则它将是空的 .