用户验证心得--基于FORMS的身份验证

来源:互联网 发布:mac安装炉石传说 编辑:程序博客网 时间:2024/05/14 11:44

我做了个项目,用户验证时用的SESSION,用户信息保存在SESSION里面,服务器运行一段时间后,在服务器负载大的时候,用户登录后用户信息经常丢失,后来我把用户验证改为了基于FORMS的验证后,基本上不会丢失用户信息了,我的软件框架设计为:

首先在Web.Config中将验证改为Forms,不允许匿名访问;

<authentication   mode="Forms" >
      <forms   name=".MYOB_APP"   loginUrl="loginout.aspx" protection="All" timeout="30"  path="/" requireSSL="false" slidingExpiration="true" defaultUrl="default.aspx" cookieless="UseDeviceProfile" enableCrossAppRedirects="false" />
    </authentication>
    <authorization >
      <deny   users="?" />
    </authorization>

登陆验证时查询数据库,如果用户有效则建立用户票证:用户附加数据格式用名称值格式,多个数据用“;”分开。

            string userdata = "BranchID:1;RoleID:1";
            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddMinutes(30), false, userdata, FormsAuthentication.FormsCookiePath);
            string encTicket = FormsAuthentication.Encrypt(ticket);
            Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

在框架的页面基类里面将当前http请求中的将用户登录ID,和其他附加数据取出,再查询数据库,将当前用户的相关信息,以及相关需要缓存的数据取出,以备当前请求页逻辑使用。

        FormsIdentity identity = (FormsIdentity)this.Page.User.Identity;
        string userdata = identity.Ticket.UserData;
        用户id就是 this.Page.User.Identity.Name

这样系统就完全不用SESSION验证了,如果用户没有登录或没有活动而超时系统自动将引导向loginout.aspx,在这个页面处理一些清理工作,再引导至登陆验证页面

 

原创粉丝点击