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