我有<form method="post" action="login_handler.php>
的PHP登录页面( login_page.php )
在 login_page.php 的顶部,我致电session_start();
我存储一个控制字符串$_SESSION['xss_check']
以防止XXS。
用户输入用户名&amp;密码并单击登录 login_handler.php 处理其凭据并重定向到登录的网站。
然后在 login_handler.php 的顶部,我再次致电session_start()
并session_regenerate_id(true)
据我所知session_regenerate_id(true)
保存旧的$_SESSION
变量,
创建一个新会话并删除旧会话。
我的问题是$_SESSION
删除session_regenerate_id(true)
数据,并且不会删除旧会话(我的会话存储文件夹会在每次调用后堆积会话文件。
我的$_SESSION['xss_check']
变量已消失,因此我的脚本失败,用户无法再登录。
现在我不确定我是否理解正确使用session_regenerate_id()
或者我是否在错误的地方使用它?
我阅读了很多帖子,除了不使用session_regenerate_id()
之外我找不到解决方案,但我想阻止会话固定。
我的代码
// start session; this runs at the top of every page as function to start or resume session
$cookieparams = session_get_cookie_params();
$path = ini_get("session.save_path");
$cookieparams['path'] = $path;
session_set_cookie_params($lifetime, $cookieparams["path"], $cookieparams["domain"], false, true);
setcookie('c_check', '1', 0);
if (session_start()) {
if (isset($_COOKIE['c_check']) && $_COOKIE['c_check'] === "1") {
$_SESSION['COOKIES_ON'] = true;
} else {
$_SESSION['COOKIES_ON'] = false;
}
} else {
// session failed to start
}
// the next code runs at the start of login_handler.php to regenerate session
session_regenerate_id(true);
if (!isset($_SESSION['LIFETIME'])) {
$_SESSION['LIFETIME'] = time();
} else if (time() - $_SESSION['LIFETIME'] > 600) {
session_regenerate_id(true);
$_SESSION['LIFETIME'] = time();
} else if (time() - $_SESSION['LIFETIME'] > $lifetime) {
session_unset();
session_destroy();
header('Location: http://localhost/session_expired.php');
exit();
}
我确定我做错了什么......我只是不知道是什么! 任何意见都表示赞赏,并提前感谢!!