【问题标题】:What are session_id, session_regenerate_id and session_name used for?session_id、session_regenerate_id 和 session_name 是做什么用的?
【发布时间】:2010-07-23 14:42:48
【问题描述】:

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

这是一个逻辑

  1. 登录
  2. 如果密码正确 = 使用 $_SESSION[isloginuser] = 1
  3. 使用 if $_SESSION[isloginuser] = 1 检查会话以查看菜单
  4. 显示菜单
  5. 用户想注销
  6. 取消会话
  7. 销毁会话系统

它的用途

session_register
session_destroy
session_unset
session_start

session_idsession_regeneratesession_name 在哪里? 在 php 网站它说

session_id() 用于获取或设置 当前会话的会话 ID。

我还是不明白,为什么我们仍然需要它们?在真实环境中有什么作用?

【问题讨论】:

  • 不仅是密码,还要确保用户名也是正确的:)
  • 当权限级别改变时总是使用session_regenerate_id
  • This link 在会话中有两个很棒的答案。

标签: php session


【解决方案1】:

不,您不需要使用它们。一般来说,您只需要

  • session_start 开始会话处理,并且
  • session_destroy 销毁存储的会话数据(这不会修改$_SESSION),并且
  • session_unset 重置$_SESSION 变量(但你也可以这样做$_SESSION = array())。

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

【讨论】:

  • 好的,但它在现实世界中的作用是什么?你在你的一个项目中使用它吗?为了什么?
  • @Adam Ramadhan:在现实世界中做什么?
  • session_id,命名并重新生成。
【解决方案2】:

session_regenerate_id() 用于防止会话固定。

会话固定意味着以下内容:您访问一个网站并检查您的会话 ID。然后,您操纵另一个用户使用您的会话 ID 访问该站点并登录。现在您以该用户的身份登录并拥有他的权限,因为你们都使用同一个会话。

为防止这种情况发生,请在用户成功登录后使用 session_regenerate_id() 为用户提供一个新的会话 ID。现在只有他拥有该会话 ID,而您的旧会话 ID 不再有效。

【讨论】:

  • 我们应该在登录时添加它吗?还是退出?
  • 在登录时执行此操作很重要。我认为没有必要在注销时执行此操作,尽管这不是一项昂贵的操作。
  • @Hammerite 很好的例子,但是每次用户刷新页面时,session_regenerate_id() 都会生成新的会话集,所以这不会影响会话吗?
  • session_regenerate_id() 将在服务器上留下活动会话文件的踪迹。 session_regenerate_id(true) 将旧的会话文件替换为新的。
【解决方案3】:

session_register() 在 5.3 中已贬值,我建议不要使用。相反,只需使用

$_SESSION['varname'] = "value";

session_id 如果您想获取用于存储在数据库中的会话 ID,它只是使用它,这不是“必要的”使用。 session_name,只是设置一个名字,这不是必须的。重新生成是如果你想做一个新的 id,除非你的应用程序需要它,否则这也不是必需的,对于登录会话,我非常怀疑你会使用它。

其他人,我希望你明白他们在做什么(即未设置/销毁)。但希望这能提供一些见解。

【讨论】:

    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • $_SESSION['cart'] = null 不会吗?
      猜你喜欢
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多