PHP会话:解释请吗?

我现在一直在学习PHP,大部分时间它一直很容易。 我唯一挂的就是让会议开始工作。 谷歌在这一努力中一直没有宽容。

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

我目前所了解的会话是与它相关的许多语法已被废弃,取而代之的是超全球性的$_SESSION数组,这更容易使用。 start_session(); 必须在与会话相关的任何语法之前。 但是,我的登录脚本没有建立会话,因为quick !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'] ,它不应该显示表单,但它确实。


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

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

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


你必须尽可能早地调用session_start() ,并且必须在使用$_SESSION之前,否则它将是空的。

链接地址: http://www.djcxy.com/p/21855.html

上一篇: PHP Sessions: Explanation please?

下一篇: how to access MySql database of web hosting site