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