PHP会话自行解除

时间:2012-12-12 15:33:42

标签: php session

每当我刷新页面时,我的会话都会一直处于未设置状态,但是当我进行控制测试时,它似乎工作正常。

控制(保留数据):

<?php
session_start();
echo(var_dump($_SESSION));
$_SESSION['name'] = 'john doe';
?>

index.php的顶部

<?php
session_start();
echo(var_dump($_SESSION));
include('utils/utils.php'); 
?>

登录页面:

<?php
session_start();
include('utils.php');
if(isset($_POST['email']) && isset($_POST['password'])){
    $email = filter($_POST['email']);
    $password = getPwd(filter($_POST['password']));
    if(!isset($_SESSION['email']) && !isset($_SESSION['password'])){
        if(isAccount($email, $password)){
            $key = genAuthKey();
            $_SESSION['email'] = $email;
            $_SESSION['auth_key'] = $key;
            mysql_query("update `users` set `auth-key`= '$key' where `email`='$email'") or die(mysql_error());
            print("ok");
        }else {
            print('error');
        }
    }else {     
        print('error');
        logOut();
    }
}else {
print('error');
}
?>

代码被触发,因为它更新了表中的auth-key。老实说,我不知道问题是什么。

此外,当我重新加载索引页面时,会话未被设置。

我还有更多信息。这些页面可以保存会话数据并保留它,但是一旦加载了另一个使用会话的页面,它将取消设置所有数据。

1 个答案:

答案 0 :(得分:0)

检查您是否使用带有BOM的Unicode编码的PHP文件。

PHP不知道BOM。 BOM会在您的第一个<?php之前产生输出,因此PHP无法为会话cookie设置相关的HTTP标头。

来自文档:

  

要使用基于cookie的会话,必须先调用session_start()   向浏览器输出任何内容。