【问题标题】:Multiple sessions in one instance using PHP?使用 PHP 在一个实例中进行多个会话?
【发布时间】:2011-04-05 20:57:15
【问题描述】:

我有一个项目,我想在一个浏览器中创建两个会话 cookie。第一个会话是唯一标识一个人,第二个会话是在用户之间共享会话内的事件。我一直在为此使用数据库,但希望在会话结束时数据消失。系统内没有登录。

除了创建 cookie 系统来复制功能之外,还有其他方法吗?

例如,我们将有两个会话 cookie:

name=someRandomUUIDsession=valueSharedBetweenUsers.

我不想与多个用户共享 name 会话,但 session 会话会。想法?

【问题讨论】:

  • 当然。我认为这是我在这里见过的最奇怪的问题。问自己一个问题,您的共享会话应该何时结束?
  • 如果我错了,请纠正我,但您本质上想要一个共享会话,对吧?您希望能够设置 $_SESSION['shared'] = 'somevalue',并在您的用户之间共享?如果是这样,那并不是真正的会话,您可能必须为此构建自己的 cookie 系统。
  • @Col。弹片:当会话中的每个用户不再使用会话时。 - --------- @Ryan Kinal 是的,我想要一个共享会话,但我也想要一个私人会话。共享会话会做你通常期望数据库做的事情(这不是一个专业项目,因为它正在搞乱可能的事情,看看我们能做些什么),我不希望 $_SESSION 正常感觉,我希望能够为一个客户管理多个 $_SESSIONS。
  • 那么,假设每个用户都会离开您的网站?你确定有可能吗?
  • 这真的是一个实验,这个概念是当每个人都离开时,它就死了。他们可能有多个共享会话,但有一个私人会话。如果共享领域中还有人,应该还活着。

标签: php session-variables session-cookies


【解决方案1】:

如果您想在用户之间共享信息,使用会话不是最好的主意,因为它使用文件系统。您最好使用处理所有锁定、并发等问题的数据库。

虽然您要求的在技术上是可能的,但我强烈建议您不要这样做。

编辑

假设我已正确理解您的要求,我会这样做:

  1. 仅使用会话来存储与该用户相关的会话数据。它可能包括以下内容:

    $_SESSION['name'] = 'test name';
    $_SESSION['groupid'] = 2;
    
  2. 带有字段groupidXXXXX(您要存储的数据)、timestamp 的 MySQL 数据库和表

每当有人更新特定组 ID 的信息时,您都会更新时间戳。

然后运行一个简单的 cronjob 来检查是否有 current time - timestamp > 3600(一小时),您可以认为这是陈旧的并删除这些记录。

【讨论】:

  • 能否请您详细说明文件系统的使用不好?
  • @user:如果两个用户同时访问该站点,则两个进程有可能同时写入共享会话。如果发生这种情况,至少有一个用户的更改将被忽略,在最坏的情况下会话文件将被损坏。
  • 我想避免使用数据库作为解决方案,我已经这样做了。我完全同意这是一种更好的方法,这不是会话的用途,但这实际上只是尝试不同的东西:多会话管理,功能类似于 $_SESSION,只允许多个会话。
【解决方案2】:

我*认为*您只能拥有一个“当前”会话,但您所指的功能是 session_name:

http://www.php.net/manual/en/function.session-name.php

cookie 功能非常简单。我建议改为调查一下。

【讨论】:

    【解决方案3】:

    “valueSharedBetweenUsers”从何而来?是常量还是数据库条目?

    无论如何,为每个组创建一个会话是没有意义的。相反,您应该为每个用户提供一个唯一的会话;将您的“共享”属性作为每个人的会话属性。

    所以开始独特的会话,然后就做<? $_SESSION['session'] = 'mySharedValue'; ?>

    现在每个人都有一个具有唯一 sessionID 和公共值“会话”的会话。

    (显然,如果您以后需要更改此属性,则必须为每个经过身份验证的人单独执行此操作)

    【讨论】:

    • 该值可以是例如在输入中输入相同单词并启动名为“apples”的会话的用户,其中两个用户都可以print_r($_SESSION) 并将数据发布到数组中。用户还可以单独控制他们所在的会话,例如为什么需要私人会话。
    【解决方案4】:

    这并不牵强,因为人们让 facebook 和 twitter 在用户登录时至少创建 10 个不同的会话。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      相关资源
      最近更新 更多