PHP Redis会话处理程序多用户

PHP Redis会话处理程序多用户,php,session,laravel,redis,Php,Session,Laravel,Redis,假设我们有一个用户,他像往常一样登录并浏览网站。那么我们可以说。。。该用户的兄弟和他希望从不同的ip或不同的浏览器登录到同一个帐户。是否可以检查redis是否有当前活动会话,并因此拒绝访问以防止同一用户多次登录?首先,您的问题与php和node.js标记有什么关系?您在哪一个案例中尝试实施您的案例 第二,无论环境是什么,存储到Redis中的内容取决于除了会话数据之外您决定存储什么。通常会话数据存储一个随机的sessionid和一个与其关联的userid。然而,在某些情况下,您可以选择将会话与尚未

假设我们有一个用户,他像往常一样登录并浏览网站。那么我们可以说。。。该用户的兄弟和他希望从不同的ip或不同的浏览器登录到同一个帐户。是否可以检查redis是否有当前活动会话,并因此拒绝访问以防止同一用户多次登录?

首先,您的问题与
php
node.js
标记有什么关系?您在哪一个案例中尝试实施您的案例

第二,无论环境是什么,存储到Redis中的内容取决于除了会话数据之外您决定存储什么。通常会话数据存储一个随机的
sessionid
和一个与其关联的
userid
。然而,在某些情况下,您可以选择将会话与尚未进行身份验证的用户相关联,从而在没有任何用户关联的情况下存储会话

防止来自不同IP的并发用户访问更多地与身份验证机制有关,而不是与会话逻辑有关

防止来自不同IP地址的并发登录的一种方法是保存活动用户的映射,如
。然后,在检查凭据之后,还要检查该映射,以查看该用户是否从其他IP地址处于活动状态。在这种情况下,您可以拒绝身份验证


此解决方案还意味着为未安全注销的用户提供一些清理机制,这与会话清理(time-to-live)非常类似。为了改进现有的实现,您可以使用与前面描述的相同的身份验证逻辑,在身份验证时将IP地址字段与用户ID一起添加到会话存储中。会话现在看起来像
。这只是一种利用会话存储并利用其清理过程的方法。

我为node.js标记感到抱歉,不知道我为什么添加了它。因为这将在PHP中完成,所以我添加了这一点。我相信这与会话逻辑有关,因为我必须在登录时存储会话,这样可以有效地检查当前登录时是否有特定用户的会话,如果有,我们不让他登录,如果没有,我们继续。我不熟悉任何用于会话管理的PHP示例,但是,基于一般概念,您确实有一个尚未验证的用户(无法识别)的会话。将浏览器视为用户。如果仅将会话与经过身份验证的用户关联,则可以通过检查该用户是否已注册到会话中来防止并发使用。如果您只想防止来自不同地址的并发使用,您需要在会话中添加一个IP字段。我明白了,但与其实际保存IP,为什么不通过cookie标识用户?因为如果他的ip改变,他就完蛋了。我以前也处理过ip限制问题,按照你的意愿实际工作是一件痛苦的事情。我不是在实际使用ip,而是在想,如果你可以在redis中保存他的phpsession id和userid,下次有人尝试使用他的凭据登录时,会抛出一个错误,因为已经有一个会话使用相同的userid。你可以通过一个cookie来识别用户,cookie的值为
sessionid
。我的回答集中在您想限制访问一个设备还是一个位置。设备:用户有一台电脑和一部电话。他一次只能从1登录。1位置:用户可以从家中的计算机和电话登录,但如果在家登录,则其凭证不能在其工作计算机上使用。最终,这将决定您是否需要在Redis中的[
sessionid
userid
]之外添加一个
IP
字段。继续…请记住,您只使用
IP
来限制不同的位置,而不是任何会话逻辑。您仍然使用
sid
cookie进行身份验证,只需进行第二次检查,查看他是否从已进行身份验证的同一来源(
IP
)请求。同样,我的答案取决于您想要限制什么:设备还是位置。