Php 我应该在每个页面上重新生成会话id吗?

Php 我应该在每个页面上重新生成会话id吗?,php,session,Php,Session,我正在尝试为我的用户身份验证会话添加更多安全性。当用户登录Iregenate\u session\u id但我希望您在我验证的每一页上回答Iregenate\u session\u id,用户将帮助我解决问题 在每个页面上验证用户身份 <?php session_start(); if(!isset($_SESSION['MEMBER_ID']) || (trim($_SESSION['MEMBER_ID']) == '')) { header("loca

我正在尝试为我的用户身份验证会话添加更多安全性。当用户登录I
regenate\u session\u id
但我希望您在我验证的每一页上回答I
regenate\u session\u id
,用户将帮助我解决问题

在每个页面上验证用户身份

<?php
    session_start();

    if(!isset($_SESSION['MEMBER_ID']) || (trim($_SESSION['MEMBER_ID']) == '')) {
        header("location: denied.php");
        exit();
    }
?>
这可能会使事情更加安全,但也会带来问题(例如,当用户在浏览器中打开页面的多个选项卡/窗口并在这些选项卡/窗口上并行导航时)。在我看来,最好在会议中使用cookies。尽管如此,您仍然可以使用session_regenate_id(),因为它也适用于cookies


此外,您还应该检查用户是否仍然被允许访问该页面。他/她可能已被禁止,但通过您当前的设置,他/她仍可以访问您的页面。

您可以使用
session\u regenerate\u id
来防止会话固定攻击,在这种攻击中,攻击者学习给定用户的会话id,然后“劫持”该会话id以代替该用户

然而,必须小心。首先,你必须考虑异步请求。如果您有许多来自用户的并发请求,您将希望避免一个脚本在另一个脚本尝试重新生成时使用会话数据的情况—一个脚本正在使用另一个脚本尝试销毁的数据

此外,这确实增加了开销。重新生成每个请求可能是一种过分的做法。相反,尝试保留一个请求计数器;每10个请求(或任意选择)重新生成ID

确保将参数传递为
true
——您不希望或不需要旧的会话数据(请记住,仍然是并发请求)。有关更多信息,请参阅()

综上所述,这种机制是一种“微观增强”,它会给你比实际安全性更多的虚假安全感。会话固定攻击并不常见,尤其是在您已经采取其他措施来增强安全性的情况下。没有什么可以取代,例如,使用HTTPS进行安全连接;没有什么可以取代密码复杂性要求

session_start();

if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
    header("location: access-denied.php");
    exit();
} else {

session_regenerate_id(); }