高分请教:怎么使用asp.net实现单点登录??
     (有详细代码的给80%,有实现思路精彩的给10%)
 谢谢~

解决方案 »

  1.   

      查看文章    
    ASP.NET单点登录(代码)-转2008-09-02 11:44由于某些原因,在我们的应用中会遇到一个用户只能在一个地方登录的情况,也就是我们通常所说的单点登录。在ASP.NET中实现单点登录其实很简单,下面就把主要的方法和全部代码进行分析。实现思路利用Cache的功能,我们把用户的登录信息保存在Cache中,并设置过期时间为Session失效的时间,因此,一旦Session失效,我们的Cache也过期;而Cache对所有的用户都可以访问,因此,用它保存用户信息比数据库来得方便。    
                 代码          string sKey = username.Text.ToString().Trim(); // 得到Cache中的给定Key的值
                string sUser = Convert.ToString(Cache[sKey]); // 检查是否存在 
                if (sUser == null || sUser == String.Empty)
                {
                    
                    TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);//取得Session的过期时间
                    HttpContext.Current.Cache.Insert(sKey, sKey, null, DateTime.MaxValue, SessTimeOut, System.Web.Caching.CacheItemPriority.NotRemovable, null);//将值放入cache己方便单点登录
                  //成功登录
                }
                else if (Cache[sKey].ToString() == sKey)//如果这个账号已经登录
                {
                    ClientScript.RegisterStartupScript(GetType(), "提示", "<script>alert('对不起,当前用户已经登录');</script>");
                    return;
                }
                else
                {
                    Session.Abandon();//这段主要是为了避免不必要的错误导致不能登录
                }  
      

  2.   

    楼上的思路不错.用缓存.
    我以前有做过一次,但比较麻烦.
    bbs.XXX.com
    WWW.xxx.com
    同一个域名两个站点,然后要求做单点登陆.
    我参考了网上的作法,让两个站点对COKIES的加密算法一致,当一个人从A站点登陆后,生成的cookies到了B站点也能被识别出来.当然我不知道楼主要用的场景.如果需要可以联系具体讨论.
      

  3.   

    用cache是好办法,也可以把登录情况存在数据库中,更保险不过速度稍慢一点
      

  4.   

    如果是分布式部署,ls的怎么解决的?
    记录到cookie不太安全:
    1.用户禁用cookie就没办法了
    2.加密算法泄密
      

  5.   

    这样的问题你搜索一下,网上大把。特别是如果你不介意看英文文章的话,各种解决方案都能找到。自己去CodeProject看看吧。
      

  6.   

    实际上cache和session一样也有超时时间的,如果用户不是正常关闭页面,cache还是在服务器上面存在的。造成的结果是人退出了了,还是要等到cache超时后才能登陆。所以此方法不完备!http://blog.sina.com.cn/s/blog_4a9b5fcf0100bdyr.html
    这个博客提供了稍微好一点儿,但是比较复杂!