asp.net cache的用法一例-实例站点的单点登录

发布时间:2019-10-18编辑:脚本学堂
asp.net cache的用法,实现站点的单点登录,不允许重复登陆,窗体验证

先说cache用法:
一个用户只能在一个地方登录,就是单点登录。
在ASP.NET中实现单点登录很简单,可是退出和非正常退出后就登陆不上去了,这是个缺点,不知道如何解决,先把cache用法放着,后边我有自己的单点登陆解决办法
把用户的登录信息保存在Cache中,设置过期时间为Session失效的时间,一旦Session失效,Cache也过期

C#代码:
   

复制代码 代码示例:
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();//这段主要是为了避免不必要的错误导致不能登录 
    } 

下面代码是一个对单点登陆的解决办法,不足之处,以待改进。

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

Xml代码:
   

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

后台代码:
C#代码:
   

复制代码 代码示例:
protected void login_btnUserLogin_Click(object sender, EventArgs e) 
    { 
        Model.userInfo.User modelUserLogin = new Model.userInfo.User(); 
        modelUserLogin.UserName = login_txtUserName.Text.Trim();//把用户名存储到Model 
        modelUserLogin.Pwd = login_txtUserPwd.Text.Trim();//把用户密码存储到Model 
        BLL.userInfo.User bllUserLogin = new BLL.userInfo.User(); 
     
        string[] session_str = new string[2]; 
     
        session_str = bllUserLogin.get_loginZT(modelUserLogin.UserName, modelUserLogin.Pwd);//调用后台sql语句判断是否登陆成功,不成功返回null 
     
        if (session_str[0] != null)//判断登陆是否成功 
        { 
            if (Session["sessionUserName"] == null || Session["sessionUserName"] == string.Empty)//判断sessionUserName的session是否为null,为null说明这个用户当前没有登陆,可以正常登陆 
            { 
                Session["sessionUserName"] = modelUserLogin.UserName; 
                Session["sessionGLBM"] = session_str[1]; 
     
                Response.Write("<script language:javascript>javascript:window.alert('登陆成功!');</script>"); 
                    FormsAuthentication.RedirectFromLoginPage(modelUserLogin.UserName, false); 
                this.Response.Redirect("../private/index/MenuIndex.aspx"); 
            } 
            if (Session["sessionUserName"].ToString().Equals(login_txtUserName.Text.Trim()))//判断sessionUserName的session的值是否与前台输入的用户名是否相同,如果相同,则说明这个用户当前正在登陆,弹出警告不允许登陆 
            { 
                Response.Write("<script language:javascript>javascript:window.alert('用户已登陆!');</script>"); 
                return; 
            } 
        } 
        else 
        { 
            Response.Write("<script language:javascript>javascript:window.alert('用户名或密码错误!');</script>"); 
        } 
    }
 

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