MVC中怎么实现单点登陆问题
要的效果是后一个登陆的把前一个登陆的踢掉,想着用application来存储用户信息,求个具体的方法或思路
------解决方案--------------------第一个人来登录
生成一个guid作为标志
application[用户ID] = 实体类;(实体类里记录 guid等信息)
application[guid] = 用户ID
然后把 guid 保存在cookie里。
又有人登录了,
判断cookie里有没有 guid
{
//没有cookie,没有登录过
}
else
{
//有cookie,登录过
}
if application[用户ID] 有了
{
application[guid] = null
}
然后在重新建立一个。
大概就是这样吧,判断的地方复杂一点,还没想仔细。
------解决方案--------------------做单点登录要使用Session和Cookie相结合,而且还有考虑到跨域、跨浏览器的问题,可以说没有经验的话,做起来非常的复杂,确切的说,不会成功。因为跨域、跨浏览器的原因,Session和Cookie往外是非常难获取!建议不是非常有必要,最好用平常的登录就够用了。
------解决方案--------------------当用户登陆的时候生产一个随机GUID写入Cookie和Session中。在当前用户在线的整个周期,这个GUID不变。
当在次登陆时,重新生成GUID,再次写入。而其他登陆的用户因为GUID变更了,所以就只能退出登陆。
用Cache + xml 来维护一个全局用户名与GUID对应的字典。
这样就可以实现单点登陆了。
------解决方案--------------------
application加锁后在并发情况下怎么办?如果有多个用户同时登陆,那么会产生排队情况,如果用户多了,这就是程序性能瓶颈。
而用Cache对象就不会产生这种情况,本身Cache对象就是线程安全的,读写速度和控制比application好的多。
当用户量达到一定的数量级别,这是要用分布式缓存来解决。
如果仅仅是做一个小项目,没几个用户的话,那就用 application 好了。
总之,按性能排序
application < 分布式缓存 < Cache
按照用户数量级别
application < Cache < 分布式缓存