2

为了避免会话固定,我在每个 PHP 页面的开头使用此代码:

session_set_cookie_params( 900, '/', $domain, 1, 1 );
session_start();
session_regenerate_id( true );

但是如果页面刷新过快或者有多个ajax请求的情况下,session id就会失效。

有没有办法避免会话固定而没有这个问题?

4

2 回答 2

2

Here is a sample of how to only regenerate the session id every 5 minutes for example:

    // 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);   
}
于 2015-02-16T20:52:58.203 回答
0

使用 http_only cookie 标志,这将防止通过 xss 攻击劫持您的会话 ID。几乎所有现代浏览器都支持它。对于较旧的浏览器,请确保您的代码中没有 xss 漏洞。如果可能的话,也使用安全标志来保护它在网络层上。

void session_set_cookie_params ( int $lifetime [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]] )

您还可以按时间或计数重新生成。希望能帮助到你!

于 2013-07-16T18:36:05.210 回答