【问题标题】:PHP "Session_regenerate_id" and Authentication of usersPHP“Session_regenerate_id”和用户身份验证
【发布时间】:2011-05-06 00:30:55
【问题描述】:

我正在我的网站上创建一个登录功能,并且我正在考虑在每个页面上重新生成会话 ID 以使事情更加安全。

我已阅读 PHP:s 有关 regenerate_id 的信息,但 PHP 页面上的帖子与他们提供的有关 session_regenerate_id 的信息大不相同。

谁能解释一下这两个问题:

  • 我需要将旧会话数据复制到新生成的数据中,还是自动完成?非常感谢代码示例...

  • 如何检查用户是否已登录?我应该在会话变量中存储什么,以及如何存储?非常感谢代码示例...

谢谢

【问题讨论】:

    标签: php mysql html security session


    【解决方案1】:

    根据您的设置,在每个页面上调用 session_regenerate_id() 可能有点矫枉过正。该功能用于防止会话劫持,并且应在用户提升其权限级别(例如登录)时使用。通常,一旦用户登录,您就会切换到 https 连接,这意味着您只需调用 session_regenerate_id() 一次,因为新 cookie 将通过安全连接传输并且无法被窃听。但是,如果您的服务器上没有 SSL 证书,则在每个页面上重新生成会话 cookie 可能是一个不错的选择。

    当您调用 session_regenerate_id() 时,您不需要复制会话数据。这一切都由 PHP 为您处理。基本上创建了一个新的会话令牌和 cookie,会话数据被复制到会话存储中以与新令牌相关联,如果您将 true 作为单个参数传递给函数,则磁盘上的旧会话数据文件将被删除。

    您在会话中存储的内容以指示用户是否已登录由您决定。我通常只存储一个简单的布尔值来指示他们是否已登录,以及包含用户名、姓名等的其他值。然后检查某人是否已登录就像这样简单:

    <?php
        if ($_SESSION['logged_in']){
            //User logged in
        } else {
           //User not logged in
        }
    ?>
    

    HTH。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-12
      相关资源
      最近更新 更多