我自己对cookie和票据有效期的理解:cookie时票据的容器,如鱼缸,票据放在cookie中,如鱼。
1、当前的身份验证信息是否过期,先看存储验证信息的客户端cookie是否过期(鱼缸是否是好的),即cookie的Expires属性值与当前时间的比较。
2、cookie过期(鱼缸破了,鱼也就死了,其他鱼缸不受影响,当然你也可以将鱼放到一个新鱼缸中,照常使用原来的票据),票据就过期,用户就要重新登录
3、cookie没过期(鱼缸没破),再看票据是否过期(鱼是否饿死),即FormsAuthenticationTicket.Expiration属性值与当前时间的比较。
4、票据过期,用户就要重新登录
5、票据没有过期,用户无须再登录,身份验证信息依然有效。
所以,我创建自定义身份验证信息的思路如下:
1、获取用户的用户名、密码以及“remember me”是否选中
2、验证用户名和密码
3、验证通过,开始创建身份验证票据
4、注意票据初始化时要设置Expiration(过期时间)的默认值,以及将“remember me”的值(bool型)赋予isPersistent属性
5、创建存储票据的cookie
6、cookie的name为FormsAuthentication.FormsCookieName,value为FormsAuthentication.Encrypt(上文中创建的票据)
7、确定是否设置cookie的Expires(有效期)。
8、如果票据的isPersistent属性为FALSE(非持久性票据),则不用设置cookie的有效期,Cookie的有效期将限制在浏览器生命周期范围内,即浏览器一关,cookie就到期
9、如果票据的isPersistent属性为TRUE(持久性票据),则设置cookie的有效期为你自己想的一个过期时间,如1年,如果此时不设置cookie的有效期,则等同于上一步
PS:
1、我觉得“是否是持久性票据”就是是不是把载有票据信息的cookie写到客户端的cookie文件夹中。
2、票据过期,无论web.config里面forms节点设置的timeout是否过期,身份验证信息就过期。
3、票据没过期,web.config里面forms节点设置的timeout过期,身份验证信息不一定过期(原因暂时不明)。