同一登录用户分配了不同的会话ID(在不同的浏览器中)

时间:2010-04-29 16:24:01

标签: php mysql session

我在php中实现了一个基于mysql的会话接口。 我刚刚发现,如果我使用浏览器A(例如Chrome)登录我的帐户,然后我在另一个浏览器B(​​例如IE)中登录到同一帐户,则为每个浏览器分配2个单独的会话ID。如何使用浏览器B再次登录时保留以前浏览器A的活动会话?

目前的问题是我在会话中存储了某些信息,并且数据未在不同浏览器中的相同用户之间同步,并且正在破坏。 :S

有没有办法实现这个目标?

谢谢!

3 个答案:

答案 0 :(得分:3)

如果要将会话存储在数据库中,请添加一种机制,将userId存储为数据库会话记录的一部分,创建我称之为“语义会话”的内容。当用户登录时,检查是否已存在另一个会话;如果是这样,请使用session_id()将新会话固定到旧会话的ID,这将加入它们(并且应该为所有后续请求更改新会话的ID)。请务必仅在登录步骤中执行此操作,否则您最终可能会遇到两个会话的怪异竞争条件,并试图互相“交换”。

答案 1 :(得分:1)

不要将数据存储在会话中,将其存储在数据库中。

答案 2 :(得分:0)

会话通常由Cookie标识,只能在一个浏览器中显示。您可以使用Flash在浏览器之间共享会话ID,但我想不出用例。会话的目的是存储绑定到单个浏览会话的数据,而不是一般的用户存储数据。您应该使用数据库或其他形式的服务器端存储来获取通用用户数据。