繁体   English   中英

FormsAuthentication类c#

[英]FormsAuthentication class c#

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

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

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

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

您可以使用浏览器检查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" />

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

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

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

FormsAuthentication.SetAuthCookie("john", false);

或明确清除票证(以及cookie):

FormsAuthentication.SignOut();

会为你工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM