我刚刚开始使用会话并且有些头痛,我昨晚有这个工作,现在正在打开它......不再有效。
在我的登录处理器中,如果一切正常,我会有以下内容。这个脚本工作正常,我已经回应了会话变量以确保数组工作,并且确实如此。
$username - > post from login script
$encrypt_password -> created from password check further up the script
{
$session_name = 'LOGIN'; // Set a custom session name
$secure = false; // Set to true if using https.
$httponly = true; // This stops javascript being able to access the session id.
$cookie_lifetime = '3600';
$cookie_path = '/';
$cookie_domain = '127.0.0.1';
session_set_cookie_params($cookie_lifetime, $cookie_path, $cookie_domain, $secure, $httponly);
session_name($session_name); // Sets the session name to the one set above.
$group = $row['group_type'];
$user_browser = $_SERVER['HTTP_USER_AGENT']; /*grabs browser info*/
$user_id = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username); /*XSS Protection*/
$group_id = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $group); /*XSS Protection*/
session_start();
$_SESSION['user']=$user_id;
$_SESSION['group_name']=$group_id;
$_SESSION['login_string'] = hash('sha512', $user_browser.$encrypt_password);
session_write_close();
header("location:".$group_id."_index.php");
}
我创建了一个包含文件的包含文件,该文件包含在每个受保护页面上的会话中,这就是它崩溃的地方。我为每个if语句创建了自定义错误代码,并且发现此处的if语句失败。回应会话变量或者晚上打印会话数组不会返回任何内容。
$session_name = 'LOGIN'; // Set a custom session name
$secure = false; // Set to true if using https.
$httponly = true; // This stops javascript being able to access the session id.
$cookie_lifetime = '3600';
$cookie_path = '/';
$cookie_domain = '127.0.0.1';
session_set_cookie_params($cookie_lifetime, $cookie_path, $cookie_domain, $secure, $httponly);
session_name($session_name); // Sets the session name to the one set above.
session_start(); // Start the php session
session_regenerate_id(false); // regenerated the session, delete the old one.
if(isset($_SESSION['user'],$_SESSION['group_name'], $_SESSION['login_string']))
我在改变之前改变了用户组的工作方式,但是没有一个变量能够完成。顺便说一句,我正在从他的啧啧中学习:create a secure login script in php and mysql
每次用户访问受保护的页面时,我还需要调用会话参数吗?
提前感谢任何指针。
答案 0 :(得分:1)
尝试将session_start();
放在所有内容的顶部,最重要的是在你召集会话之前。你在开始之前就打电话给session_name($session_name);
。
it=session
答案 1 :(得分:0)
您在每个页面上重新生成会话,这会导致上一个会话销毁数据。
删除session_regenerate_id(false);