首页 文章

PHP会话:请说明?

提问于
浏览
1

我现在已经学习了一点点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 回答

  • 1

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

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

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

  • 4

    你必须尽早调用 session_start() ,并且肯定在使用 $_SESSION 之前,否则它将是空的 .

相关问题