2010-08-30 63 views
2

我有一个项目,我想在一个浏览器中创建两个会话cookie。第一场会议是为了唯一识别一个人,第二场会议是在会议之间分享用户之间的事件。我一直在使用这个数据库,但希望数据在会话消失时消失。系统中没有登录。使用PHP的一个实例中的多个会话?

有没有办法做到这一点,除了创建一个cookie系统来复制功能?

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

name=someRandomUUIDsession=valueSharedBetweenUsers.

我不想分享name会话与多个用户,但session会议将是。思考?

+1

当然。我认为这是我见过的最奇怪的问题。问你的自己一个问题,**当你的共享会话应该死亡?** – 2010-08-30 16:55:04

+0

纠正我,如果我错了,但你基本上想要共享会话,对吗?您希望能够设置$ _SESSION ['shared'] ='somevalue',并让您的用户共享这些内容?如果是这样,那不是一个真正的会话,你可能必须为此建立自己的cookie系统。 – 2010-08-30 16:56:10

+0

@Col。弹片:当会议中的evey用户不再使用会话时。 - --------- @Ryan Kinal是的,我想要一个共享会话,但我也想要一个私人会话。共享会话将完成您通常期望数据库执行的操作(这不是一个专业的项目,它可能会影响可能的操作,看到我们可以做什么),我不希望$ _SESSION处于正常状态感觉,我希望能够为一个客户端管理多个$ _SESSIONS。 – Incognito 2010-08-30 17:04:18

回答

3

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

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

编辑

假设我理解正确的您的要求,这里是我会怎么做:

  1. 使用会话只涉及到用户存储会话数据。它可能包括像:

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

每当有人为特定的组ID更新信息,你更新时间戳。

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

+0

您能否扩展文件系统的使用情况? – Incognito 2010-08-30 16:59:35

+2

@user:如果两个用户在同一时间点击该网站,则两个进程都可能在同一时间写入共享会话。如果发生这种情况,至少一个用户的更改将被忽略,最坏的情况下会话文件将被损坏。 – cHao 2010-08-30 17:01:57

+0

我想避免使用数据库作为解决方案,我已经这样做了。我完全同意这是一种更好的方式,这不是会话的目的,但这只是尝试一些不同的方法:多个会话管理,功能类似于$ _SESSION,只允许多个会话。 – Incognito 2010-08-30 18:04:15

1

“valueSharedBetweenUsers”来自哪里?它是一个常量或数据库条目?

无论哪种方式,每组创建一个会话都没有意义。你应该给每个用户一个独特的会话,每个用户;与你的“共享”属性作为每个人的会话属性。

因此,开始的唯一的会话,然后就去做<? $_SESSION['session'] = 'mySharedValue'; ?>

现在,每个人都有一个独特的会话ID和共同价值“会话”的会话。

(显然,如果你需要在以后修改这个属性你必须为每个authed单独分开做)

+0

例如,该值可以是将相同单词输入到输入中的用户,并且可以开始一个名为“apples”的会话,其中两个用户都可以“print_r($ _ SESSION)”并将数据发布到数组中。用户还可以单独控制他们在哪些会话中,作为为什么需要私人会话的例子。 – Incognito 2010-08-30 17:11:14

0

这不是一样牵强,因为人们正在Facebook和Twitter至少有10个不同的会话正在当用户登录时创建。