gpt4 book ai didi

asp.net-mvc - Cookie 过期或 session 超时过早

转载 作者:行者123 更新时间:2023-12-04 00:47:00 27 4
gpt4 key购买 nike

我有这样的代码,当用户被授权时运行:

 FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
email,
DateTime.Now,
DateTime.Now.AddMinutes(120),
true,
userData);

string encTicket = FormsAuthentication.Encrypt(authTicket);
HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
faCookie.Expires = authTicket.Expiration;
Response.Cookies.Add(faCookie);

然后我重定向到具有 Authorize 属性的 Controller /操作:
 [Authorize]
public class ProductsController : Controller
{

我在 web.config 中有以下内容:
 <authentication mode="Forms">
<forms loginUrl="~/Home/Unauthorized" timeout="2880" />
</authentication>
<sessionState timeout="120"></sessionState>

然而,用户提示 session 超时或在几分钟不事件后重定向 Home/Unauthorized。

什么可能导致这种情况,我还应该检查什么?

最佳答案

在我讨论您的登录名到期的可能解决方案之前,我有一些想法。首先,FormsAuthentication cookie 和 SessionState 是两个完全不同的东西。您可以拥有一个或另一个,或两者兼而有之。因此,这两项的超时时间也不相关。

FormsAuthentication cookie 是一个加密的 cookie,其中包含一些基本信息,例如用户名和过期值。一旦用户通过身份验证,.NET 应用程序就会使用此 cookie,以了解用户是否有权使用某些资源。

控制 FormsAuthentication cookie 的加密和解密的是 MachineKey对于 IIS 上的该 Web 应用程序。 MachineKey 是一组用于加密和解密 cookie 的 key 。默认情况下,IIS 上的 Web 应用程序设置为自动生成机器 key 。这意味着当应用程序启动时,会生成一个随机的机器 key 。如果应用程序回收,您将获得一个新的机器 key 。此外,如果您托管在共享提供商上,Web 主机通常会平衡您的应用程序负载,这意味着由多个服务器托管。这些服务器中的每一个都会自动生成一个机器 key 。

如果您的 Web 应用程序处于负载平衡方案中,那么 Web 场中的每台机器都无法解密对方的加密 cookie。这将给人一种“被注销”的感觉。此示例是登录 Web 服务器 A,然后后续请求转到 Web 服务器 B。Web 服务器 B 不与 Web 服务器 A 共享机器 key 并且无法解密 cookie,从而将用户发送回登录页面。

解决方案是在您的 web.config 中定义 MachineKey 部分,以便 IIS 的每个实例将使用相同的 key ,并且如果应用程序池回收,您仍然拥有相同的机器 key 。

这是一个 example machine key (使用 .NET 2.0 版本),您可以将其放置在您的 web.config 中

<system.web>
<machineKey validationKey="EBC1EF196CAC273717C9C96D69D8EF314793FCE2DBB98B261D0C7677C8C7760A3483DDE3B631BC42F7B98B4B13EFB17B97A122056862A92B4E7581F15F4B3551"
decryptionKey="5740E6E6A968C76C82BB465275E8C6C9CE08E698CE59A60B0BEB2AA2DA1B9AB3"
validation="SHA1" decryption="AES" />
</system.web>

其他想法是您在 web.config (2880) 中的过期时间与您实际设置的过期时间 (120) 不匹配。您可能希望它们都匹配。

关于asp.net-mvc - Cookie 过期或 session 超时过早,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26257423/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com