一次只允许一个会话
我想让我的网站一次只允许一个会话。 例如,假设用户已经login到我的网站在Firefox上,如果用户再次login到另一台浏览器,如歌剧在同一台计算机或不同的计算机上,Firefox上的会话将被销毁。 然而,如果仍然是一个会话,Firefox上的会话仍然存在。 我可以知道我该怎么做? 我使用的是PHP和Apache。 谢谢。
问候。 本杰明
我会build议你做这样的事情:
假设用户“A”第一次login到“Com_1”。 在数据库中保存一个唯一的代码,与用户会话相同。
同时,如果他(用户“A”)再次登入“com_2”,则检查他在数据库中的状态并更新数据库中的唯一代码。
如果同一用户(用户“A”)刷新“com_1”上的页面,我们只需要检查会话中唯一的代码并将其与数据库匹配,这肯定是不匹配的注销并销毁会话。
为了保持用户login,即使浏览器closures,您也可以将cookie存储在浏览器中,然后重新生成会话。
希望这可以帮助。 谢谢。
您可以使用以下algorithm
- 在databse userLoggedInCount中创build一个整数字段
- 在标记并将结果存储在会话中的每个login增量上。
- 在每个请求上检查数据库中的值和会话中的值,如果会话中的值小于数据库中的值,则使会话
invalidate()
,并减小数据库中的值 - 每当会话被破坏时,也减less该值
对Bozho的信贷,因为他张贴这个, 在这里回答一个问题
保存当前login的中央数据库表或文本文件。 如果用户已经在另一个会话中login,则通过将“login”标志设置为false来使该会话无效。
我想你不得不这样做:
- 添加一个“last_session_id”列到你的用户表中
- 当用户login时,用其当前会话ID更新其last_session_id字段
- 在每个页面上,如果用户有一个authentication的会话,检查会话ID是否等于数据库中logging的。 如果不是,则销毁此会话。
将用户的IP => SESSION_ID对保存在数据库中。 当用户尝试加载你的页面,你必须比较实际的IP => SESSION_ID对,然后允许/拒绝,如果对是好的/不同的。