FormsAuthenticationTicket

151 阅读2分钟

1.FormsAuthentication一共有两种生成并记录票具的方法:

  一种是自己new FormsAuthenticationTicket,然后自己保存到Cookie中,ticket的 IsPersistent属性仅起到标识的作用,并不会去修改Cookies的到期时间,需要人工自己判断后设置cookies的到期时间(if (ticket.IsPersistent){coo.Expires = ticket.Expiration; })。

  另一种是使用FormsAuthentication.SetAuthCookie("username",IsPersistent: false);来快捷生成ticket,这种方法系统会自动新建一个cookies来保存ticket,并根据IsPersistent是否为true, 以及webconfig中的timeout来确定cookies的到期时间。

2.如果使用第一种方法,无论自己把cookies的时间设置为多久,只要ticket.Expiration到期了,及时cookies还存在,用户验证依然会失败。

3.UserData是个好东西,可以用来存储IP地址,用于判断访问者是否是恶意截取cookies。

1.使用Forms验证存储用户自定义信息

Forms验证在内部的机制为把用户数据加密后保存在一个基于cookie的票据FormsAuthenticationTicket中,因为是经 过特殊加密的,所以应该来说是比较安全的。而.net除了用这个票据存放自己的信息外,还留了一个地给用户自由支配,这就是现在要说的UserData。

UserData可以用来存储string类型的信息,并且也享受Forms验证提供的加密保护,当我们需要这些信息时,也可以通过简单的get方法得到,兼顾了安全性和易用性,用来保存一些必须的敏感信息还是很有用的。 下面来看怎么使用UserData,然后会给出一个实际使用的例子。

 //创建一个新的票据,将客户ip记入ticket的userdata
 FormsAuthenticationTicket ticket=new FormsAuthenticationTicket(
 1,userName.Text,DateTime.Now,DateTime.Now.AddMinutes(30),
  false,Request.UserHostAddress);
//将票据加密
string authTicket=FormsAuthentication.Encrypt(ticket);
  //将加密后的票据保存为cookie
  HttpCookie coo=new HttpCookie(FormsAuthentication.FormsCookieName,authTicket);
  //使用加入了userdata的新cookie
  Response.Cookies.Add(coo);

下面是FormsAuthenticationTicket构造函数的重载之一的方法签名
public FormsAuthenticationTicket(
int version,
string name,
DateTime issueDate,
DateTime expiration,
bool isPersistent,
string userData
 );