日期:2014-05-17  浏览次数:20543 次

MVC中怎么实现单点登陆问题
要的效果是后一个登陆的把前一个登陆的踢掉,想着用application来存储用户信息,求个具体的方法或思路
MVC

------解决方案--------------------
第一个人来登录

生成一个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对应的字典。
这样就可以实现单点登陆了。

------解决方案--------------------
引用:
session是用户级别的,不适合这种场景

cookie也是用户级别的。

application 加锁就行了,里面别放太大的东东。

单纯xml的效率是没有application高的,所以要加缓存,但是这个缓存怎么实现?弄不好的话,效率还是没有application高。


另外 ,单点登录,不是两个人用一个账户登录,后一个人把前一个人踢掉。

单点登录,指的是,访问人登录A网站之后,再去访问B站点,这时不用再次登录,B网站可以自动识别当前访问人是谁。


application加锁后在并发情况下怎么办?如果有多个用户同时登陆,那么会产生排队情况,如果用户多了,这就是程序性能瓶颈。
而用Cache对象就不会产生这种情况,本身Cache对象就是线程安全的,读写速度和控制比application好的多。

当用户量达到一定的数量级别,这是要用分布式缓存来解决。

如果仅仅是做一个小项目,没几个用户的话,那就用 application 好了。

总之,按性能排序
 application <  分布式缓存 < Cache
按照用户数量级别
 application <   Cache < 分布式缓存