如果我调用FormsAuthentication.SetAuthCookie(“john”,true),用户名是否存储在cookie中?
我想知道的是,如果用户会话超时,然后用户再次访问该网站,则Request.IsAuthenticated设置为true,但用户名称来自何处?
答案 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();
会为你效劳。