可以在FormsAuthenticationTicket中设置什么?

时间:2009-10-01 06:06:36

标签: .net asp.net asp.net-mvc cookies

关于FormsAuthenticationTicket和实际的cookie容器,我仍然感到有点困惑。

  1. DateExpiration中的FormsAuthenticationTicket()是指什么?那饼干死了吗?用户可以在没有任何活动操作(即超时)的情况下保持登录多长时间?

  2. <forms loginUrl="~/Account/LogOn"
           protection="All"
           timeout="20160"
           name="test"
           path="/"
           requireSSL="false"
           slidingExpiration="false"
           defaultUrl="default.aspx"
           cookieless="UseDeviceProfile"
           enableCrossAppRedirects="false" />
    

    这是我的网络配置中的内容。现在,将这些中的任何一个自动设置为cookie吗?例如,我可以从name字段中获取制作Cookie时需要抓取的内容吗?

     HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
    

    但是设置protection(无论是什么),timeoutslidingExpirationenableCrossAppRedirectscookieless等等呢?我没有看到设置这些的属性。它们会自动从webconfig中获取还是什么?

  3. DateExpiration中设置的FormsAuthTicket与您为Cookie设置的authCookie.Expires之间有什么区别?

  4. 由于

1 个答案:

答案 0 :(得分:3)

  1. FormsAuthenticationTicket.Expiration是故障单到期的时间。票证到期日期/时间存储在加密票证中,因此与cookie到期时间无关。请注意,客户端可以查看并篡改cookie过期时间,但不应该篡改加密的票证。
  2. 它控制用户无需重新验证即可访问网站的时间。

    1. 来自web.config的值用于构建故障单。您还可以使用所需的任何值构建自己的票证,对其进行加密并将其存储在cookie中。在FormsAuthenticationTicket类的MSDN文档中有一个这样的例子。
    2. <强>更新

      This MSDN article有关于此主题的信息。如果在web.config中将保护设置为All,则使用machineKey元素上指定的算法对故障单进行加密。根据{{​​3}},默认值为SHA1和AES。

      如果您想查看未加密的票证,可以在web.config中设置protect =“None”,但通常不希望在生产应用中执行此操作。

      您还可以使用Lutz Reflector等工具检查FormsAuthentication和FormsAuthenticationTicket类的来源,以了解有关如何生成故障单的更多信息。