MVC中怎么实现单点登陆问题

pandaban 2013-06-19 03:56:14
要的效果是后一个登陆的把前一个登陆的踢掉,想着用application来存储用户信息,求个具体的方法或思路
...全文
501 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
frogprincehe 2014-09-23
  • 打赏
  • 举报
回复
单点登录 做企业OA肯定用得到。 要有一个集中认证站点,只做认证。 站点加cache。里面放用户id和认证的guid。认证通过客户端用cookie记下认证的guid。跨站点了读cookie里的guid到认证站点里的cache找有没有,有的话就过认证,没有跳到认证页面。
csdnfan 2013-06-20
  • 打赏
  • 举报
回复
cookie加session可以实现。 application 还是算了吧。
asuka986 2013-06-20
  • 打赏
  • 举报
回复
个人还是认为用Cookie比较好
  • 打赏
  • 举报
回复
引用 16 楼 u010793151 的回复:
session是用户级别的,不适合这种场景 cookie也是用户级别的。 application 加锁就行了,里面别放太大的东东。 单纯xml的效率是没有application高的,所以要加缓存,但是这个缓存怎么实现?弄不好的话,效率还是没有application高。 另外 ,单点登录,不是两个人用一个账户登录,后一个人把前一个人踢掉。 单点登录,指的是,访问人登录A网站之后,再去访问B站点,这时不用再次登录,B网站可以自动识别当前访问人是谁。
application加锁后在并发情况下怎么办?如果有多个用户同时登陆,那么会产生排队情况,如果用户多了,这就是程序性能瓶颈。 而用Cache对象就不会产生这种情况,本身Cache对象就是线程安全的,读写速度和控制比application好的多。 当用户量达到一定的数量级别,这是要用分布式缓存来解决。 如果仅仅是做一个小项目,没几个用户的话,那就用 application 好了。 总之,按性能排序 application < 分布式缓存 < Cache 按照用户数量级别 application < Cache < 分布式缓存
  • 打赏
  • 举报
回复
单点登陆,你有得有一个验证站点,这个站点,登陆,注销用户的cookie 然后子站点用josnp 取登陆信息,登陆了,写到子站点。退出,清除所有登陆信息。
金色海洋 2013-06-20
  • 打赏
  • 举报
回复
session是用户级别的,不适合这种场景 cookie也是用户级别的。 application 加锁就行了,里面别放太大的东东。 单纯xml的效率是没有application高的,所以要加缓存,但是这个缓存怎么实现?弄不好的话,效率还是没有application高。 另外 ,单点登录,不是两个人用一个账户登录,后一个人把前一个人踢掉。 单点登录,指的是,访问人登录A网站之后,再去访问B站点,这时不用再次登录,B网站可以自动识别当前访问人是谁。
pandaban 2013-06-20
  • 打赏
  • 举报
回复
引用 14 楼 lifeilin6671 的回复:
application 对象存在多用户访问问题。在用户量比较大的情况下,会产生性能瓶颈。最好不要用。
谢谢
  • 打赏
  • 举报
回复
application 对象存在多用户访问问题。在用户量比较大的情况下,会产生性能瓶颈。最好不要用。
pandaban 2013-06-20
  • 打赏
  • 举报
回复
引用 11 楼 u010793151 的回复:
手写代码,没有缩进,往包涵,谢谢。
研究研究,很感谢啊
  • 打赏
  • 举报
回复
当用户登陆的时候生产一个随机GUID写入Cookie和Session中。在当前用户在线的整个周期,这个GUID不变。 当在次登陆时,重新生成GUID,再次写入。而其他登陆的用户因为GUID变更了,所以就只能退出登陆。 用Cache + xml 来维护一个全局用户名与GUID对应的字典。 这样就可以实现单点登陆了。
金色海洋 2013-06-20
  • 打赏
  • 举报
回复
手写代码,没有缩进,往包涵,谢谢。
金色海洋 2013-06-20
  • 打赏
  • 举报
回复

第一个人来登录

生成一个guid作为标志

application[用户ID] = 实体类;(实体类里记录 guid等信息)
application[guid] = 用户ID

然后把 guid 保存在cookie里。

又有人登录了,

判断cookie里有没有 guid 
{
//没有cookie,没有登录过,判断 application[用户ID] ,如果有了,把他踢掉
if application[用户ID] 有了 
{
 application[application[用户ID].guid] = null
}

}
else
{
//有cookie,登录过,判断application[guid]

if (application[guid] 有)
{
//有——登录有效
}
else
{
//没有了——被踢掉了,或者被IIS回收,或者失效。
}
}

 
金色海洋 2013-06-20
  • 打赏
  • 举报
回复
引用 3 楼 pandaban 的回复:
[quote=引用 2 楼 u010793151 的回复:] 第一个人来登录 生成一个guid作为标志 application[用户ID] = 实体类;(实体类里记录 guid等信息) application[guid] = 用户ID 然后把 guid 保存在cookie里。 又有人登录了, 判断cookie里有没有 guid { //没有cookie,没有登录过 } else { //有cookie,登录过 } if application[用户ID] 有了 { application[guid] = null } 然后在重新建立一个。 大概就是这样吧,判断的地方复杂一点,还没想仔细。
cookie是存本地吧,另外一个用户登陆在这个cookie里面能找到这guid吗?[/quote] 当然不能了,所以才需要用两个application 一个application的key是UserID,另一个application的key是这个guid。
吴青峰 2013-06-20
  • 打赏
  • 举报
回复
application这个最好不要用,你可以上网查查application这个是什么东西。如果控制不好,后果很大。 想学我建议学点使用的东西,我觉得这个这个你今后很长时间都不会遇到,或者说再你写程序的生涯都不会遇到,毫不夸张的说。即使遇到,你的经验也很丰富了,到时做起来也不会像现在这么困难。而且这样10个人有8个说不清楚,不是说别人不会,是别人也没有亲自做过。
pandaban 2013-06-20
  • 打赏
  • 举报
回复
引用 6 楼 qingfeng_wu 的回复:
做单点登录要使用Session和Cookie相结合,而且还有考虑到跨域、跨浏览器的问题,可以说没有经验的话,做起来非常的复杂,确切的说,不会成功。因为跨域、跨浏览器的原因,Session和Cookie往外是非常难获取!建议不是非常有必要,最好用平常的登录就够用了。
但是我想学一下啊,万一以后遇到呢。现在同事用application+session在做。
吴青峰 2013-06-20
  • 打赏
  • 举报
回复
做单点登录要使用Session和Cookie相结合,而且还有考虑到跨域、跨浏览器的问题,可以说没有经验的话,做起来非常的复杂,确切的说,不会成功。因为跨域、跨浏览器的原因,Session和Cookie往外是非常难获取!建议不是非常有必要,最好用平常的登录就够用了。
pandaban 2013-06-20
  • 打赏
  • 举报
回复
up up 求个好用好理解的思路
u010953764 2013-06-19
  • 打赏
  • 举报
回复
2楼的,cookie存本地,不符合要求啊
pandaban 2013-06-19
  • 打赏
  • 举报
回复
引用 2 楼 u010793151 的回复:
第一个人来登录 生成一个guid作为标志 application[用户ID] = 实体类;(实体类里记录 guid等信息) application[guid] = 用户ID 然后把 guid 保存在cookie里。 又有人登录了, 判断cookie里有没有 guid { //没有cookie,没有登录过 } else { //有cookie,登录过 } if application[用户ID] 有了 { application[guid] = null } 然后在重新建立一个。 大概就是这样吧,判断的地方复杂一点,还没想仔细。
cookie是存本地吧,另外一个用户登陆在这个cookie里面能找到这guid吗?
金色海洋 2013-06-19
  • 打赏
  • 举报
回复
第一个人来登录 生成一个guid作为标志 application[用户ID] = 实体类;(实体类里记录 guid等信息) application[guid] = 用户ID 然后把 guid 保存在cookie里。 又有人登录了, 判断cookie里有没有 guid { //没有cookie,没有登录过 } else { //有cookie,登录过 } if application[用户ID] 有了 { application[guid] = null } 然后在重新建立一个。 大概就是这样吧,判断的地方复杂一点,还没想仔细。
加载更多回复(1)

62,040

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧