我在php中实现了一个基于mysql的会话接口。 我刚刚发现,如果我使用浏览器A(例如Chrome)登录我的帐户,然后我在另一个浏览器B(例如IE)中登录到同一帐户,则为每个浏览器分配2个单独的会话ID。如何使用浏览器B再次登录时保留以前浏览器A的活动会话?
目前的问题是我在会话中存储了某些信息,并且数据未在不同浏览器中的相同用户之间同步,并且正在破坏。 :S
有没有办法实现这个目标?
谢谢!
答案 0 :(得分:3)
如果要将会话存储在数据库中,请添加一种机制,将userId存储为数据库会话记录的一部分,创建我称之为“语义会话”的内容。当用户登录时,检查是否已存在另一个会话;如果是这样,请使用session_id()
将新会话固定到旧会话的ID,这将加入它们(并且应该为所有后续请求更改新会话的ID)。请务必仅在登录步骤中执行此操作,否则您最终可能会遇到两个会话的怪异竞争条件,并试图互相“交换”。
答案 1 :(得分:1)
不要将数据存储在会话中,将其存储在数据库中。
答案 2 :(得分:0)
会话通常由Cookie标识,只能在一个浏览器中显示。您可以使用Flash在浏览器之间共享会话ID,但我想不出用例。会话的目的是存储绑定到单个浏览会话的数据,而不是一般的用户存储数据。您应该使用数据库或其他形式的服务器端存储来获取通用用户数据。