Php 会话id、会话重新生成id和会话名称用于什么?

Php 会话id、会话重新生成id和会话名称用于什么?,php,session,Php,Session,好吧,我是一个会话新手,让我们想象一下,我们有一个小小的登录站点 这是一个逻辑 登录 如果password right=使用$\u会话[isaloginuser]=1 检查会话以查看$\u会话[isaloginuser]=1时的菜单 显示菜单 用户想要注销 取消设置会话 销毁会话系统 它用什么 session_register session_destroy session_unset session_start session\u id和session\u重新生成或session\u nam

好吧,我是一个会话新手,让我们想象一下,我们有一个小小的登录站点

这是一个逻辑

  • 登录
  • 如果password right=使用$\u会话[isaloginuser]=1
  • 检查会话以查看$\u会话[isaloginuser]=1时的菜单
  • 显示菜单
  • 用户想要注销
  • 取消设置会话
  • 销毁会话系统
  • 它用什么

    session_register
    session_destroy
    session_unset
    session_start
    
    session\u id
    session\u重新生成
    session\u name
    在哪里? 在php网站上,它说

    会话_id()用于获取或设置 当前会话的会话id


    我还是不明白,为什么我们需要它们呢?在真实环境中它做什么?

    不,您不需要使用它们。一般来说,你所需要的是

    • 启动会话处理,以及
    • 销毁存储的会话数据(这不会修改
      $\u会话
      ),以及
    • 重置
      $\u SESSION
      变量(但也可以执行
      $\u SESSION=array()

    和用于获取和设置当前会话ID和会话ID名称(默认值为
    PHPSESSID
    )。可用于重新生成/更改当前会话的会话ID。例如,如果您希望每10分钟刷新一次会话ID,或在更改与会话关联的用户的真实性状态后刷新会话ID,则此选项可能会很有用。

    会话ID是会话的标识符。服务器存储客户机数据的方式是在cookie中。此cookie随每个HTTP请求一起由该客户端发送到服务器。PHP将cookie设置为随机字符串标记。此令牌标识客户机并将其与一组键值对相关联。会话变量的概念是cookie很容易被篡改。然而,会话ID是随机字符串,很难复制,因此增加了安全性。

    在5.3中被贬低,我建议不要使用。相反,只要使用

    $_SESSION['varname'] = "value";
    
    session_id如果您想获取存储在数据库中的会话id,那么就不需要使用它。会话名称,只设置一个名称,这不是必需的。重新生成是指如果你想创建一个新的id,这也是没有必要的,除非你的应用程序需要它,对于登录会话,我非常怀疑你会使用它


    其他人,我希望你能理解他们的所作所为。但希望这能给我一些启示。

    我通常在创建购物篮时使用session_id(),这样我就可以跟踪该用户添加的内容。然后,一旦我从支付网关收到支付成功的响应,我就可以重新生成session_()这样,当他们回到我的网站上时,他们以前的篮子就不可见了,对我来说,这就像是一个新用户“进入”了商店。

    session\u regenerate\u id()
    用于防止会话固定

    会话固定指的是:您访问一个网站并检查您的会话ID。然后您操纵另一个用户使用您的会话ID访问该网站并登录。现在,您以该用户的身份登录并拥有其权限,因为您使用的是同一个会话


    要防止出现这种情况,请在用户成功登录时使用
    session\u regenate\u ID()
    为其提供一个新的会话ID。现在只有他有会话ID,而您的旧会话ID不再有效。

    不仅要输入密码,还要确保用户名正确:)当权限级别更改时,始终使用
    session\u regenerate\u ID
    在会话上有两个很棒的答案。好的,但它在现实世界中起什么作用?你在你的项目中使用它吗?为了什么?@Adam Ramadhan:在现实世界中做什么?会话id、名称和重新生成。我们应该在登录时添加它吗?或者在注销时?在登录时这样做很重要。我认为注销时不必这样做,尽管这不是一个昂贵的操作。@Hammerite是一个很好的例子,但每次用户刷新页面时,
    session\u regenate\u id()
    都会生成新的会话集,所以这不会影响会话中的会话?session\u regenate\u id()将在服务器上留下活动会话文件的跟踪。会话重新生成会话id(true)将替换旧的会话文件,而新的会话文件将被替换。
    $\u会话['cart']=null
    不行吗?