asp.net单点登录 高分请教:怎么使用asp.net实现单点登录?? (有详细代码的给80%,有实现思路精彩的给10%) 谢谢~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 查看文章 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();//这段主要是为了避免不必要的错误导致不能登录 } 楼上的思路不错.用缓存.我以前有做过一次,但比较麻烦.bbs.XXX.comWWW.xxx.com同一个域名两个站点,然后要求做单点登陆.我参考了网上的作法,让两个站点对COKIES的加密算法一致,当一个人从A站点登陆后,生成的cookies到了B站点也能被识别出来.当然我不知道楼主要用的场景.如果需要可以联系具体讨论. 用cache是好办法,也可以把登录情况存在数据库中,更保险不过速度稍慢一点 如果是分布式部署,ls的怎么解决的?记录到cookie不太安全:1.用户禁用cookie就没办法了2.加密算法泄密 这样的问题你搜索一下,网上大把。特别是如果你不介意看英文文章的话,各种解决方案都能找到。自己去CodeProject看看吧。 实际上cache和session一样也有超时时间的,如果用户不是正常关闭页面,cache还是在服务器上面存在的。造成的结果是人退出了了,还是要等到cache超时后才能登陆。所以此方法不完备!http://blog.sina.com.cn/s/blog_4a9b5fcf0100bdyr.html这个博客提供了稍微好一点儿,但是比较复杂! 图片相示的问题,求助!! 文本编辑器的问题 asp.net 如何创建这种定时器 将datatable填充到dataset Repeater重写(有没有人会呀,两个帖子一起接) 关于sqlconnecion,sqlcommand等对象的定义位置。 【挑战】一段Javascript代码转换为ASP代码 关于开发数据接口API的问题 为什么Table的表格线不能完全显示出来 各位帮帮忙阿,这段代码哪里有毛病? 请问为什么没有办法取出DropDownList1.SelectedValue的值? 用xml做数据库的操作
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();//这段主要是为了避免不必要的错误导致不能登录
}
我以前有做过一次,但比较麻烦.
bbs.XXX.com
WWW.xxx.com
同一个域名两个站点,然后要求做单点登陆.
我参考了网上的作法,让两个站点对COKIES的加密算法一致,当一个人从A站点登陆后,生成的cookies到了B站点也能被识别出来.当然我不知道楼主要用的场景.如果需要可以联系具体讨论.
记录到cookie不太安全:
1.用户禁用cookie就没办法了
2.加密算法泄密
这个博客提供了稍微好一点儿,但是比较复杂!