一次只允许一个会话

我想让我的网站一次只允许一个会话。 例如,假设用户已经login到我的网站在Firefox上,如果用户再次login到另一台浏览器,如歌剧在同一台计算机或不同的计算机上,Firefox上的会话将被销毁。 然而,如果仍然是一个会话,Firefox上的会话仍然存在。 我可以知道我该怎么做? 我使用的是PHP和Apache。 谢谢。

问候。 本杰明

我会build议你做这样的事情:

假设用户“A”第一次login到“Com_1”。 在数据库中保存一个唯一的代码,与用户会话相同。

同时,如果他(用户“A”)再次登入“com_2”,则检查他在数据库中的状态并更新数据库中的唯一代码。

如果同一用户(用户“A”)刷新“com_1”上的页面,我们只需要检查会话中唯一的代码并将其与数据库匹配,这肯定是不匹配的注销并销毁会话。

为了保持用户login,即使浏览器closures,您也可以将cookie存储在浏览器中,然后重新生成会话。

希望这可以帮助。 谢谢。

您可以使用以下algorithm

  1. 在databse userLoggedInCount中创build一个整数字段
  2. 在标记并将结果存储在会话中的每个login增量上。
  3. 在每个请求上检查数据库中的值和会话中的值,如果会话中的值小于数据库中的值,则使会话invalidate() ,并减小数据库中的值
  4. 每当会话被破坏时,也减less该值

对Bozho的信贷,因为他张贴这个, 在这里回答一个问题

保存当前login的中央数据库表或文本文件。 如果用户已经在另一个会话中login,则通过将“login”标志设置为false来使该会话无效。

我想你不得不这样做:

  • 添加一个“last_session_id”列到你的用户表中
  • 当用户login时,用其当前会话ID更新其last_session_id字段
  • 在每个页面上,如果用户有一个authentication的会话,检查会话ID是否等于数据库中logging的。 如果不是,则销毁此会话。

将用户的IP => SESSION_ID对保存在数据库中。 当用户尝试加载你的页面,你必须比较实际的IP => SESSION_ID对,然后允许/拒绝,如果对是好的/不同的。