PHP会话在刷新时重置
我一直试图在网上搜索这个问题的可能答案,但我实在想不出来。有很多人有类似的问题,但我的问题有一个独特的触感,我不理解,我也没有在其他地方遇到过 我创建了一个运行良好的登录系统。但是,我想让它更安全,所以我使用了本教程:。我仍然可以登录,但每当我刷新页面时,我都会自动注销。之后,我发现会话ID发生了变化 奇怪的是,当我调用var_dump($\u SESSION);在我的代码的第三行(直接在session_start()之后),session ID保持不变,一切正常。我一评论这一行,问题就回来了 我确实使用以下代码重新生成会话ID:PHP会话在刷新时重置,php,session,Php,Session,我一直试图在网上搜索这个问题的可能答案,但我实在想不出来。有很多人有类似的问题,但我的问题有一个独特的触感,我不理解,我也没有在其他地方遇到过 我创建了一个运行良好的登录系统。但是,我想让它更安全,所以我使用了本教程:。我仍然可以登录,但每当我刷新页面时,我都会自动注销。之后,我发现会话ID发生了变化 奇怪的是,当我调用var_dump($\u SESSION);在我的代码的第三行(直接在session_start()之后),session ID保持不变,一切正常。我一评论这一行,问题就回来了
$session_name = 'robinator123'; // Set a custom session name
$secure = FALSE;
// This stops JavaScript being able to access the session id.
$httponly = true;
// Forces sessions to only use cookies.
if (ini_set('session.use_only_cookies', 1) === FALSE) {
header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
exit();
}
// Gets current cookies params.
$cookieParams = session_get_cookie_params();
session_set_cookie_params($cookieParams["lifetime"],
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);
// Sets the session name to the one set above.
session_name($session_name);
session_start(); // Start the PHP session
session_regenerate_id(true); // regenerated the session, delete the old one.
当我调用var_dump($_SESSION);,重新生成失败,因为标头已由var_转储发送。但是,当我用普通的echo语句替换var_dump时,头也会失败,但会话ID仍然会更改。我不知道发生了什么事
请注意:
- 我没有忘记调用session_start();在我的代码的开头
- 我用来存储会话变量的附带php代码位于我的web根目录之外,但是如果我将它们放回我的根目录中,问题就没有解决,所以我猜这不可能是问题所在李>
然而,我仍然很好奇var_dump是如何避免这个问题的 删除
session\u regenerate\u id(true)
您不想重新生成session id。让php处理所有session id内容。您应该拥有一个$\u会话['myid']
,它持有您想要的数据库项的密钥。谢谢,但根据我参考的教程,重新生成会话ID更安全;“另外,“session_regenate_id()”函数在每次重新加载页面时重新生成会话id,有助于防止会话劫持。”。这是真的,还是最好不要再生?好吧,这样看。。。用户请求:给我那个页面。你的网站:好的,访客aeb123。访客。好的,我是aeb123。你的网站。不,老兄,我会叫你123的。下一个请求。你好,我是aeb123。你的网站我不知道任何aeb123。我只知道123。要防止会话劫持,请使用长会话id。在会话到期之前,很难及时强制执行它们。如果用户每分钟向同一个页面发出超过100个请求,那么可以使用洪水防护来阻止用户,这是一个相当不错的防护措施。@Michaeldibtes您不需要强行劫持会话。XSS是一种攻击向量,它可以很容易地给客户端cookies。