Ari*_*ant 14 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!");
}
?>
Run Code Online (Sandbox Code Playgroud)
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
?>
Run Code Online (Sandbox Code Playgroud)
现在使用上面的代码,inbox.php总是显示输出:SESSION =您必须登录才能看到此页面.这意味着没有设置会话变量或者inbox.php无法检索会话变量.我哪里错了?
rev*_*evo 33
- 确保
session_start();在调用任何会话之前调用.因此,安全的赌注是将其放在页面的开头,紧接在开始<?php标记之后的任何其他内容.还要确保在开始<?php标记之前没有空格/制表符.- 在后
header重定向,使用结束当前的脚本exit();(其他人也建议session_write_close();,并session_regenerate_id(true),你可以尝试那些为好,但我会用exit();).- 确保在您用于测试的浏览器中启用了cookie.
- 确保
register_globals关闭,您可以在php.ini文件上检查并使用phpinfo().请参阅本关于如何将其关闭.- 确保您没有删除或清空会话.
- 确保
$_SESSION超级全局数组中的键不会被覆盖.- 确保您重定向到同一个域.所以从a重定向
www.yourdomain.com到yourdomain.com不会进行会话.- 确保你的文件扩展名是
.php(它发生!).
我有一段时间有同样的问题,很难搞清楚.我的问题是我的网站工作了一段时间,会议工作正常,然后突然间一切都破了.
显然,你的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用户有权访问该文件夹.