欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

用session登录的一些问题

程序员文章站 2022-05-16 21:57:59
...
这样的,我写了一个登录,用的是session。登录的时候,把sessionid用redis储存起来。

现在我想实现一个功能,就是两个用户登录同一个账户,后登录的把前登录的挤掉。

我的一种想法是,登录时,更新redis中存的sessionid,登录用户每做一次操作,都去redis中查询他登录时存的sessionid和当前的是否一致,不一致就是未登录。但是这样做会不会读redis的次数太频繁?会不会有压力?

还有一种想法,就是登录的时候,肯定能从redis中获取到上次存的sessionid,能不能通过这个sessionid把session文件给销毁,这样,前面登录的用户获取不到session文件,就算是未登录了。这种方法只是在登录的时候读取了数据库,读数据库的次数比较少。但是,有一点,我不知道怎么通过sessionid把文件销毁~~

各位大牛,这两个方法哪个好一点?第二个方法中,怎样通过sessionid把文件销毁?或者有没有更好的方法呢?谢谢指教


回复讨论(解决方案)

第二种方法没看明白。是说B登录的时候获得session_id然后销毁A的session文件吗?这怎么做得到

第二种方法没看明白。是说B登录的时候获得session_id然后销毁A的session文件吗?这怎么做得到

恩,我就是这个意思,所以我想知道怎么能做到。

做不到啊,session是保存在用户浏览器的 不是同一台电脑登录的话怎么可能删除
或者你的意思是A B两个账号只在同一台电脑登录吗..

做不到啊,session是保存在用户浏览器的 不是同一台电脑登录的话怎么可能删除
或者你的意思是A B两个账号只在同一台电脑登录吗..


我意思是,只是通过sessionid去删除服务器上保存的文件,这样的话,A用户通过他的sessionid就获取 不到储存到服务器上信息了。

登录的时候,把sessionid用redis储存起来
你是用 用户名做键,还是用 sessionid 做键?

如果用用户名做键,那么 redis 中只会有一个 用户名存在,此时他的值(sessionid)不是你的话,就算你没登陆
如果用 sessionid 做键,那么需要依据用户名查询出对应的键(得到多个 sessionid)
遍历这些 sessionid 对不是你的 sessionid 做
session_id($sessionid);
session_start();
unset_session();
最后做
session_id($你的sessionid);
session_start();

登录的时候,把sessionid用redis储存起来
你是用 用户名做键,还是用 sessionid 做键?

如果用用户名做键,那么 redis 中只会有一个 用户名存在,此时他的值(sessionid)不是你的话,就算你没登陆
如果用 sessionid 做键,那么需要依据用户名查询出对应的键(得到多个 sessionid)
遍历这些 sessionid 对不是你的 sessionid 做
session_id($sessionid);
session_start();
unset_session();
最后做
session_id($你的sessionid);
session_start();


用 用户名做键,由于网站必须登录才能使用,那第一个问题,每次验证是否登录都会去redis查询一次,会不会压力太大?用户基数不会太大,最多也就几万吧。

redis 是基于内存的,session 是基于文件的
你就不怕硬盘损坏?

redis 是基于内存的,session 是基于文件的
你就不怕硬盘损坏?


第一句我明白,但是硬盘损坏不太懂,请版主大大赐教。

这有什么可不懂得吗?
杞人忧天,懂吧?

这有什么可不懂得吗?
杞人忧天,懂吧?


OK,明白了。3Q版主~