asp.net cache用法,单点登陆,同一时间同一用户只能登陆一个,不允许重复登陆,窗体验证

先cache用法:

一个用户只能在一个地方登录,就是单点登录。
在ASP.NET中实现单点登录很简单,可是退出和非正常退出后就登陆不上去了,这是个缺点,不知道如何解决,先把cache用法放着,后边我有自己的单点登陆解决办法

把用户的登录信息保存在Cache中,设置过期时间为Session失效的时间,一旦Session失效,Cache也过期

C#代码 复制代码
  1. string sKey = username.Text.ToString().Trim(); // 得到Cache中的给定Key的值   
  2. string sUser = Convert.ToString(Cache[sKey]); // 检查是否存在   
  3. if (sUser == null || sUser == String.Empty)   
  4. {   
  5.         TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);//取得Session的过期时间   
  6.         HttpContext.Current.Cache.Insert(sKey, sKey, null, DateTime.MaxValue, SessTimeOut, System.Web.Caching.CacheItemPriority.NotRemovable, null);//将值放入cache己方便单点登录   
  7.          //成功登录   
  8. }   
  9. else if (Cache[sKey].ToString() == sKey)//如果这个账号已经登录   
  10. {   
  11.          ClientScript.RegisterStartupScript(GetType(), "提示""<script>alert('对不起,当前用户已经登录');</script>");   
  12.          return;   
  13. }   
  14. else  
  15. {   
  16.          Session.Abandon();//这段主要是为了避免不必要的错误导致不能登录   
  17. }  



下边的是我自己对单点登陆的解决办法,但肯定还有不尽人意的地方,如果你发现了,看到了,敬请留言,以待改进

web.Config下的<system.web>标签下先设置窗体验证

Xml代码 复制代码
  1. <authentication mode="Forms">//mode值是Forms为定义成窗体验证   
  2.     <forms loginUrl="public/Login.aspx" name=".ASPXAUTH">//用户未登陆就先访问public/Login.aspx页面   
  3. </forms>  
  4. </authentication>  
  5. <authorization>  
  6.     <deny users="?"/>  
  7. </authorization>  



后台代码:

C#代码 复制代码
  1. protected void login_btnUserLogin_Click(object sender, EventArgs e)   
  2. {   
  3.     Model.userInfo.User modelUserLogin = new Model.userInfo.User();   
  4.     modelUserLogin.UserName = login_txtUserName.Text.Trim();//把用户名存储到Model   
  5.     modelUserLogin.Pwd = login_txtUserPwd.Text.Trim();//把用户密码存储到Model   
  6.     BLL.userInfo.User bllUserLogin = new BLL.userInfo.User();   
  7.   
  8.     string[] session_str = new string[2];   
  9.   
  10.     session_str = bllUserLogin.get_loginZT(modelUserLogin.UserName, modelUserLogin.Pwd);//调用后台sql语句判断是否登陆成功,不成功返回null   
  11.   
  12.     if (session_str[0] != null)//判断登陆是否成功   
  13.     {   
  14.         if (Session["sessionUserName"] == null || Session["sessionUserName"] == string.Empty)//判断sessionUserName的session是否为null,为null说明这个用户当前没有登陆,可以正常登陆   
  15.         {   
  16.             Session["sessionUserName"] = modelUserLogin.UserName;   
  17.             Session["sessionGLBM"] = session_str[1];   
  18.   
  19.             Response.Write("<script language:javascript>javascript:window.alert('登陆成功!');</script>");   
  20.                 FormsAuthentication.RedirectFromLoginPage(modelUserLogin.UserName, false);   
  21.             this.Response.Redirect("../private/index/MenuIndex.aspx");   
  22.         }   
  23.         if (Session["sessionUserName"].ToString().Equals(login_txtUserName.Text.Trim()))//判断sessionUserName的session的值是否与前台输入的用户名是否相同,如果相同,则说明这个用户当前正在登陆,弹出警告不允许登陆   
  24.         {   
  25.             Response.Write("<script language:javascript>javascript:window.alert('用户已登陆!');</script>");   
  26.             return;   
  27.         }   
  28.     }   
  29.     else  
  30.     {   
  31.         Response.Write("<script language:javascript>javascript:window.alert('用户名或密码错误!');</script>");   
  32.     }   
  33. }  



重点就是在那两个session的判断上

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值