我拥有为我的web应用程序实现的一流的基于登录的PHPSESSID机制。困扰我的一个方面是用户在浏览器A中孤立他的会话(在计算机A上),在浏览器B中(在计算机B上)打开另一个浏览器,孤立它以回到浏览器A等等。可能所有这些都在PHPSESSID cookie有效的(合理冗长的)时间范围内。如果两个会话都显示用户静态数据,并且用户正在操作这些数据,那么这两个浏览器不一定会显示与数据库中数据一致的数据。如何管理跨浏览器的PHP会话
我对这种情况的首选回应是第二次登录两次使第一次无效。我可以在数据库中保留一个与userID关联的PHPSESSID。这很简单。现在最困难的部分是:在第二次登录时,我如何使写入数据库的PHPSESSID失效,从而使第一次会话(现在失效的PHPSESSID)的后续访问失败?
(因为要杀死第二PHPSESSID,一个我其实想保持我不能使用session_destroy()。我不能完全相同的理由使用setcookie()函数。)
我有一个想法涉及数据库访问序列号。每个新请求都会返回前一个加号。如果顺序不正确,session_destroy()当前查询者。我所看到的稍有不便之处在于,它需要额外的数据库提取才能在每个用户访问之前恢复序列号。
是否有任何方法将此序列号与服务器缓存内某个用户ID相关联,该用户ID不涉及任何cookie传输?
谢谢。
我并不完全同意这首先是一个问题。如果用户暂时处于非活动状态,是不是一直有数据在服务器端发生变化的可能性?为什么要剥夺用户使用他想要的任何浏览器的自由?用户界面不应该更新问题吗? – 2010-08-31 07:48:54
不可以。数据不会自动改变。今天的家庭有这么多电脑。用户可以在他的桌面上打开一个会话,并在他的笔记本电脑上放置另一个会话。如果一个人不知道另一个,他们都会显示垃圾。 (这是Ajax,我不刷新屏幕,会话只是向数据库通知更新,应用程序的推测是它随时知道数据库的状态,因为它驱动所有更新,在登录时记录。) – Ollie2893 2010-08-31 07:54:57