PHP会话:请说明?

时间:2011-01-27 09:35:41

标签: php session login

我现在已经学习了一点点PHP,而且大部分内容都非常简单。我唯一能做的就是让会议开始工作。谷歌在这方面的努力是无情的。

这可能是两个原因之一;语法或我的软件。我目前正在使用EasyPHP 5.3.5.0在未连接到互联网的机器上构建本地网站。将其连接到互联网不是一种选择。

我目前对会话的了解是,许多与之相关的语法已被弃用,取而代之的是超级全局$_SESSION数组,它更易于使用。 start_session();必须在与会话相关的任何语法之前。但是,我的登录脚本没有建立会话,因为快速!isset ($_SESSION['username'])总是返回true。

我的脚本设置如下:

PHP包括login.php,这是一个表单。 check_login.php验证它,如果查询返回一行,它将重定向到login_success.php,它建立会话,给出欢迎消息,然后重定向(使用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 个答案:

答案 0 :(得分:6)

看起来你没有在你的main_login.php中使用session_start(),就像etranger所提到的那样。您需要在每个新请求开始时调用该函数以开始使用会话。

否则,如果 调用session_start()并且您忽略了在代码示例中显示它,那么可能会在重定向期间丢失会话ID。您是使用基于cookie的会话还是将会话ID作为URL参数传递?尝试在每页顶部打印session_id()SID。这将告诉您会话何时丢失(会话ID将更改或“”)。

如果你正在使用基于cookie的会话,那么cookie可能会因某种原因而丢失。如果您使用URL参数传递会话ID,那么透明的会话ID支持可能无法正常工作。

答案 1 :(得分:1)

您必须尽早致电session_start(),并且肯定在使用$_SESSION之前,否则将为空。