会话变量不工作php

时间:2013-10-30 19:28:51

标签: php session session-variables

以下是我的登录页面的代码,其中登录脚本检查用户的真实性,然后使用标题功能重定向到收件箱页面。

<?php
session_start();

include_once('config.php');
$user=htmlentities(stripslashes($_POST['username']));
$password=htmlentities(stripslashes($_POST['password']));
// Some query processing on database    

if(($id_user_fetched<=$id_max_fetched) && ($id_user_fetched!=0)){
$_SESSION['loggedIn'] = 'yes';
    header("Location:http://xyz/inbox.php?u=$id_user_fetched");
    //echo 'Login Successful';
    }else{
        echo 'Invalid Login';
        echo'<br /> <a href="index.html">Click here to try again</a>';
        }
}else{
    echo mysqli_error("Login Credentials Incorrect!");
    }
?>

inbox.php页面如下所示:

<?php
session_start(); 
echo 'SESSION ='.$_SESSION['loggedIn'];
if($_SESSION['loggedIn'] != 'yes'){
echo $message = 'you must log in to see this page.';
//header('location:login.php');
}
 //REST OF THE CODE

?>

现在使用上面的代码,inbox.php总是显示输出:  SESSION =您必须登录才能看到此页面。 这意味着没有设置会话变量或者inbox.php无法检索会话变量。我哪里错了?

10 个答案:

答案 0 :(得分:28)

  
      
  1. 确保在调用任何会话之前调用session_start();。因此,安全的赌注是将其放在页面的开头,紧接在开始<?php标记之后。还要确保在打开<?php标记之前没有空格/制表符。
  2.   
  3. header重定向后,使用exit();结束当前脚本(其他人也建议session_write_close();session_regenerate_id(true),您也可以尝试这些,但我会使用exit();)。
  4.   
  5. 确保在您用于测试的浏览器中启用了Cookie。
  6.   
  7. 确保register_globals已关闭,您可以在php.ini文件上以及使用phpinfo()进行检查。有关如何将其关闭的信息,请参阅this
  8.   
  9. 确保您没有删除或清空会话。
  10.   
  11. 确保$_SESSION超全局数组中的密钥不会被覆盖。
  12.   
  13. 确保您重定向到同一个域。因此,从www.yourdomain.com重定向到yourdomain.com不会使会话向前发送。
  14.   
  15. 确保您的文件扩展名为.php(它会发生!)。
  16.   

PHP session lost after redirect

答案 1 :(得分:8)

我有一段时间有同样的问题,并且很难搞清楚。我的问题是我的网站工作了一段时间,会议工作正常,然后突然间一切都破了。

显然,你的session_save_path()对我来说是/ var / lib / php5 /,需要具有正确的权限(运行php的用户,例如www-data需要对目录的写访问权限)。我不小心改变了它,彻底打破了会议。

运行sudo chmod -R 700 /var/lib/php5/然后sudo chown -R www-data /var/lib/php5/,以便php用户可以访问该文件夹。

答案 2 :(得分:3)

如果您的会话路径无法正常工作,您可以尝试使用session.save_path(path/to/any folder);函数作为替代路径。如果有效,您可以询问您的托管服务提供商有关默认路径问题。

答案 3 :(得分:2)

如果你使用连接脚本,也不要忘记在连接上使用session_start();,在注意到这个问题之前遇到了一些麻烦。

答案 4 :(得分:1)

刚刚与托管服务商谈,这是他们最终的问题。 他说“你的帐户session.save_path没有设置为结果问题出现了。我现在就为你设置了。”

之后它可以正常工作:)

答案 5 :(得分:1)

会话无法正常工作的另一个重要原因是使用会话cookie设置,例如。将会话cookie生存期设置为0或其他低值因为简单的错误或其他开发人员的原因。

session_set_cookie_params(0)

答案 6 :(得分:0)

我有类似的问题和cookie域:

    ini_set('session.cookie_domain', '.domain.com');

域名设置错误,因此所有会话都被忽略,因为用户cookie从未设置好,希望这会对某人有所帮助。

答案 7 :(得分:0)

我今天遇到了这个问题。问题与$ config ['base_url']有关。我注意到htpp://www.domain.com和http://example.com是个问题。要修复,请始终将base_url设置为http://www.example.com

答案 8 :(得分:0)

我也遇到了同样的问题,我做了以下步骤来解决问题

  1. 我编辑了文件/etc/php.ini并搜索了路径session.save_path =&#34; / var / lib / php / session&#34;你必须提供会话信息
  2. 2之后刚刚更改了下面给出的权限* chown root.apache / var / lib / php / session * 就是这样。以上步骤解决了我的问题

答案 9 :(得分:0)

也许对我自己有帮助的其他人

session_regenerate_id(false);

我将其删除,一切正常!

可以正常登录后...哎呀!