Asp.Net 采用Forms身份认证,避免采用Session占用服务器资源

来源:互联网 发布:数据库基础与应用pdf 编辑:程序博客网 时间:2024/06/05 11:57

今天写了个测试用户,也发现了一些问题:

  1. ticket 必须加密存放在cookie中,userData才能保存,否则,获取userData时会找不到值:

    FormsAuthenticationTicket ticket = newFormsAuthenticationTicket(

    1,

    "admin",

    DateTime.Now,

    DateTime.Now.AddDays(10),

    true,

    "userData"

    );

    string encryptTicket = FormsAuthentication.Encrypt(ticket);//必须加密之后才有效

    HttpCookie cookie = newHttpCookie(FormsAuthentication.FormsCookieName, encryptTicket);

    cookie.Expires = ticket.Expiration;

    Response.Cookies.Add(cookie);

    //FormsAuthentication.SetAuthCookie(ticket.Name, ticket.IsPersistent, "/");

     

    上面两种方式均是将登陆票据放在cookie中,且cookie名称都为FormsAuthentication.FormsCookieName,但是后者将会丢失userData信息。

     

  2. 如果觉得User信息不够,可以派生GenericPrincipal类来重写用户信息

    publicclassPageUser : GenericPrincipal {

    privateint userId;

    publicint UserId {

    get { return userId; }

    }

     

    public PageUser(IIdentity identity, string[] roles)

    : base(identity, roles) {

    userId = 1;

    }

    publicbool hasRight(RightTye right) {

    returnfalse;

    }

    }

     

FormsIdentity fi = (FormsIdentity)User.Identity;

FormsAuthenticationTicket ticket = fi.Ticket; //取得票据

string userData = ticket.UserData; //取得信息

string[] roles = userData.Split(',');

HttpContext.Current.User = newPageUser(fi, roles);

PageUser pageUser = HttpContext.Current.User asPageUser;

 

  1. 也可以不重写User信息,将用户扩展信息写到userData中,采用Xml格式进行解析

例如,登录的时候:

string userData = @"

    昵称"">

        

            

            

            

        

        

            

            

            

                

    ";

原创粉丝点击