当前位置:编程学习 > C#/ASP.NET >>

求解决案:ASP.NET 网站防止多重登录(多台Web服务器,一台Session StateServer)

向高手求救:

   ■现在有这样一个需求:
     因为负荷分散的原因,网站需要在发布在多台Web服务器上,用户登录时需要先判断此用户是否已经通过别的客户端登录了。(这样通过Application保存用户登录信息就行不通了。)

   ■我现在想的是:
     将Session还是由一台Session StateServer管理,用户登录时先访问Session StateServer,查找有没有相同的用户名已经保持了Session,如果有就将这个Session销毁。 不知道此方案可行与否。

   ■问题:
    1。什么方式可以访问Session StateServer并查找其他Session的信息?
    2。.NET是否允许销毁其他用户的Session?
--------------------编程问答-------------------- 可行的,访问 Session 时没有用户区分,都是执行你的代码

你的代码,可以做任何你想要做的事 --------------------编程问答-------------------- 谢谢ciznx的答复,能否代码提示怎么获取Session StateServer中保存的别的Session的信息? --------------------编程问答--------------------
引用 2 楼 royeah 的回复:
谢谢ciznx的答复,能否代码提示怎么获取Session StateServer中保存的别的Session的信息?


Session 在服务器上是一个集合对象,可以枚举的

string[] keys = Session.Keys;
foreach(string key in keys)
{
    object userSession = Session[key];
    // 其他工作
}

在其中加入 lock 会更好

--------------------编程问答-------------------- session是服务端的,所以你登录后直接判断session["用户ID"]即可得到 --------------------编程问答-------------------- 我的情况不同,我是要获取别人登录的Session信息,
您这种方式只能获取自己的Session信息。 --------------------编程问答-------------------- 换句话说,Session是有ID的,Session[key]这种方式只能获取SessionID为本Session的信息。 --------------------编程问答-------------------- 或者用cache也可以实现 --------------------编程问答-------------------- Session["用户名"]=当前登陆的用户名      每个页面的操作也引用Session["用户名"],这个就避免的操作上的错误,也解决了 单点登录 --------------------编程问答-------------------- cache和Session["用户名"]的方式都是一个Applcation内的共享数据,我现在想要得是跨应用程序域的数据。

比如说A的请求(UerID=“001”)通过Web服务器(1)登录了,这个时候B的请求(登录的UerID也用“001”)通过Web服务器(2)登录,这个时候想要抛警告说“此UserID已经通过别的机器登录”。

Web服务器(2)是没有办法去遍历Web服务器(1)的Cache的,也不能访问它的Application['xxx']的数据。

现在的想法是:
将Web服务器(1)和Web服务器(2)的Session通过同一台Session StateServer进行管理,但是问题是Session StateServer也是跨域的,和process in memory模式管理Session不一样,我不知道怎么去访问Session StateServer可以获取A(B)的Session[‘UerID’]信息。 --------------------编程问答-------------------- ASP.net单点登录(SSO)解决方案 研究一下应该有你想要的 --------------------编程问答-------------------- http://apps.hi.baidu.com/share/detail/6519658 具体地址 --------------------编程问答--------------------
引用 10 楼 ganlu423 的回复:
ASP.net单点登录(SSO)解决方案 研究一下应该有你想要的



谢谢提醒,原来一直想避开SSO寻求更简单的方案,看来绕不过去了。 --------------------编程问答-------------------- 可以用数据库判断试试嘛,字段状态在session过期后update成未登录。 --------------------编程问答--------------------
引用 13 楼 baysos 的回复:
可以用数据库判断试试嘛,字段状态在session过期后update成未登录。


这个项目的Web服务器不允许访问DB,需要通过访问另外一台Web Service服务器来访问数据库。
看来需要构建一个SSO的Service来解决了,当然SSO的Service可以借助数据库。但是借助数据库又有优点也有缺点,缺点是你需要自己维护Session信息(如果网络或系统出现问题,而残留的Session信息没有被销毁的话会造成Session已过期的用户还在登陆状态的假象,需要想办法维护)。 --------------------编程问答-------------------- 服务器集群,负载均衡
个人意见,估计用上面的关键词定位该问题会收获更多
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,