一共三个系统,A,B,C,如何实现,在任意系统登陆后,在访问其他系统时,不用再登陆/
解决方案 »
- 如何循环遍历取得 aspx 页面中由 javascript 动态产生的一组 input type="text" 的文本输入框的值???
- 微软的<微软快速成长型企业中心 在线点播中心>菜单太帅了,进来看研究一下。
- 请各位大虾帮帮忙,急!
- 33963771成都.NET技术群,欢迎你的加入...
- 求助刷新问题
- 打印 rd.PrintToPrinter(1,true,0,0) 缺少参数值
- 自动编号的id值
- 很急,单击input弹出日历,根据选择的日期,绑定Dropdownlist
- 请教高手,请问为什么创建asp.net工程时失败?
- 上传Excel文件(不同版本的)
- ASPNET_WP.exe占CPU率到了100%,求分析方法
- gridview的问题
实现思路
利用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();//这段主要是为了避免不必要的错误导致不能登录
}
引用"孟子E章"
第一步修改Web.config文件,加入以下几句
<authentication mode="Forms">
<forms name=".AspNetForums" protection="All" timeout="60" loginUrl="hiForum/web/login.aspx" />
</authentication>
<machineKey
validationKey= "CS0B3CFVS6J1F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3435267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529ADD4GD6"
decryptionKey= "8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F"
validation="SHA1">
</machineKey>
以上的的东东.你三个项目的都必须一制.第二步,登录写入Cookies
FormsAuthentication.SetAuthCookie(user_name,false);
HttpCookie lcookie = Context.Response.Cookies[FormsAuthentication.FormsCookieName];
lcookie.Expires=DateTime.Now.AddDays(System.Convert.ToInt32(14));
lcookie.Domain = ".123456.com";
以上的lcookie.Domain = ".123456.com"; 这个很重要,也就是只要在*.123456.com上面无论是ABC登录过.其它的都不用登录了,也就是域...