多次登录时取消设置会话


unset session on multiple login

我正在开发一个安全性起主要作用的应用程序。当我尝试使用用户名和密码登录时,任何其他系统上使用相同用户名的其他登录都应该被停用。

我该怎么做?当我在谷歌上搜索这个问题时,我没有得到任何相关的想法。

我从家里登录,当我从办公室登录到我的系统时个人系统会话应销毁

而言,特别是"个人会话被破坏"意味着远程清除您的家庭浏览器历史记录(删除会话/cookie等)
这可能不是必要的(取决于你需要的安全级别),或者最好只是远程访问你的电脑。


如果您实际上不需要销毁"主"会话,则是一个解决方案

一个基本的方法是:

成功登录后,脚本设置一个本地会话ID并将其存储在数据库中
安全区域内的每个页面/部分都会将您的本地会话ID与数据库中的会话ID进行核对
如果匹配,则显示页面,否则重定向到登录页面。

每次您成功登录时,它都会重置数据库中的会话存储,因此当您在工作中登录时,由于会话不再匹配,您将不会在家中登录。

您的场景

您在家中登录,创建一个会话,会话ID存储在数据库中,并在本地浏览器中引用(默认为cookie)
每个安全区域页面都会检查用户的本地会话ID是否与数据库中的ID匹配。

在国内,目前是这样。

你去上班,转到登录页面(它找不到会话/cookie,所以允许你尝试登录)
当您成功登录时,脚本将设置一个新的会话和会话ID,并使用该新的会话ID更新数据库。

现在,当你浏览工作中的安全区域时,脚本会检查你的本地会话ID和数据库,它们会匹配,这样你就可以看到安全的东西。

在家里,有人试图浏览您的登录区域,但本地会话ID与存储在DB中的会话ID不再匹配,因为它现在是您在工作中登录时设置的会话ID
所以他们被重定向到登录页面。

安全说明

这只是一个基本的例子,虽然上面的内容会起作用,但它本身并不是一个完全安全的"登录系统"。拥有安全登录系统的最佳实践已经在许多其他问题/答案/教程中介绍过(即使用HTTPS、IP日志、浏览器数据检查、时间戳+自动注销等)。