会话变量不工作的PHP

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

<?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无法检索会话变量。 我哪里错了?

  1. 确保session_start(); 在任何会话被调用之前调用。 所以一个安全的选择就是把它放在页面的开头,紧接在开始的<?php标签之后。 还要确保在打开<?php标记之前没有空白/标签。
  2. header重定向后,使用exit();结束当前脚本exit(); (其他人也建议session_write_close();session_regenerate_id(true) ,你也可以尝试这些,但我会使用exit(); )。
  3. 确保在您正在使用的浏览器中启用Cookie以对其进行测试。
  4. 确保register_globals已关闭,您可以在php.ini文件中检查并使用phpinfo() 。 请参考如何关闭它。
  5. 确保你没有删除或清空会话。
  6. 确保$_SESSION超全局数组中的键不被覆盖。
  7. 确保你重定向到同一个域。 因此,从www.yourdomain.com重定向到yourdomain.com并不会带来会议进展。
  8. 确保你的文件扩展名是.php (发生!)。

重定向后PHP会话丢失

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

显然,你的session_save_path()对我来说是/ var / lib / php5 /,需要有777个chmod权限。 我意外地改变了它,完全打破了会议。

要解决,只需在Linux上执行sudo chmod -R 777 /var/lib/php5/ (或者任何你的session_save_path())。

编辑:更改权限777不是最好的解决方案,如果你知道用户运行你的后端服务器。 运行sudo chmod -R 700 /var/lib/php5/然后sudo chown -R www-data /var/lib/php5/让php用户可以访问该文件夹。

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

刚刚与主机服务商谈过,这是一个问题。 他说:“你的账户session.save_path没有设置,因此我现在就为你设置了。”

它后,它正常工作:)

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

我有类似的问题,并与Cookie域:

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

该域设置错误,所以所有会话被忽略,因为用户cookie从来没有设置正确的希望这将有助于某人。

我今天遇到这个问题。 这个问题与$ config ['base_url']有关。 我注意到htpp://www.domain.com和http://example.com是问题。; 要解决,总是将您的base_url设置为http://www.example.com

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

 session_set_cookie_params(0)