FormsAuthentication类c#

时间:2009-06-18 03:03:41

标签: c# asp.net forms-authentication

如果我调用FormsAuthentication.SetAuthCookie(“john”,true),用户名是否存储在cookie中?

我想知道的是,如果用户会话超时,然后用户再次访问该网站,则Request.IsAuthenticated设置为true,但用户名称来自何处?

3 个答案:

答案 0 :(得分:3)

会话超时和身份验证超时是两个不同的事情。您可以使会话超时而不会使身份验证失效。

是的,用户名称存储在身份验证cookie中。然而,它是加密的。

答案 1 :(得分:1)

您可以使用浏览器检查Cookie的内容。例如,我的堆栈溢出cookie看起来像:

... F650CE82F53D2C39C8C06B5F26EB34E20FEAC3585035E2A6E9FA30B8ECF5051F4D9C8

该值是用户名的加密goo,可能是用户角色。

只要您愿意,cookie就是好的。它与会话无关。

在您的示例代码中,您创建了一个持久性cookie,因此即使您关闭浏览器,它也会在cookie的生命周期中存在。现在,如果cookie是基于内存的,它会一直持续到你关闭浏览器为止,即使过期时间会让它活得更久。

以下是默认值:

<forms loginUrl="Login.aspx"
           protection="All"
           timeout="30"
           name=".ASPXAUTH" 
           path="/"
           requireSSL="false"
           slidingExpiration="true"
           defaultUrl="default.aspx"
           cookieless="UseDeviceProfile"
           enableCrossAppRedirects="false" />

答案 2 :(得分:0)

从此MSDN页面开始,如果CookiesSupported设置为false,则会将表单身份验证票证设置为Cookie或URL。

当您将第二个参数设置为true时,cookie是持久的,因此当用户第二次访问时(会话超时后),您的应用会获取带有auth-ticket的cookie,因此它会获取用户详细信息(据我所知)。

如果您不希望这种情况发生,我认为要么将第二个参数设置为false:

FormsAuthentication.SetAuthCookie("john", false);

或明确清除故障单(以及cookie):

FormsAuthentication.SignOut();

会为你效劳。