为避免会话固定,我在每个PHP页面的开头使用此代码:
session_set_cookie_params( 900, '/', $domain, 1, 1 );
session_start();
session_regenerate_id( true );
但是如果页面刷新太快或者在多个ajax请求的情况下,会话ID将变为无效。
有一种方法可以避免会话固定而没有这个问题吗?
答案 0 :(得分:2)
以下是如何仅每5分钟重新生成会话ID的示例,例如:
// Sets the session name to the one set above.
session_name($session_name);
// Start the PHP session
session_start();
// Set last regen session variable first time
if (!isset($_SESSION['last_regen'])) {
$_SESSION['last_regen'] = time();
}
// Set session regeneration time in seconds
$session_regen_time = 60*5;
// Only regenerate session id if last_regen is older than the given regen time.
if ($_SESSION['last_regen'] + $session_regen_time < time()){
$_SESSION['last_regen'] = time();
session_regenerate_id(true);
}
答案 1 :(得分:0)
使用http_only cookie标志,这将阻止通过xss攻击劫持您的会话ID。几乎所有现代浏览器都支持它。对于旧版浏览器,请确保您的代码中没有xss漏洞。如果可能,还要使用安全标志将其保护在网络层上。
void session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]] )
您还可以按时或按计数重新生成。希望它有所帮助!