首页 > 解决方案 > Asp.Net core/Razor Pages 奇怪的会话行为:会话每秒被丢弃一次

问题描述

我有一个 Razor Pages 应用程序,其中有一个非常简单的部分,用户输入一个 ID 并被重定向到显示特定内容的页面。

当用户输入 ID 时,我正在设置 Session 变量,如下所示:

HttpContext.Session.Clear();
HttpContext.SignOutAsync();
foreach(var cookie in Request.Cookies.Keys)
{
    Response.Cookies.Delete(cookie);
}
HttpContext.Session.SetInt32("Token", 12345);
return Redirect("/DisplayPresentation");

我删除所有 cookie 并退出的原因是因为我想确保当前会话中没有其他内容。

基本上我在重定向页面上接收到该会话值,就像这样:

int tokenId = HttpContext.Session.GetInt32("Token") ?? default(int);

无论出于何种原因,我无法解释自己,每次我执行此“登录”过程时,会话都会被服务器丢弃,因此tokenId将是0.

我注意到我对应用程序的不同部分有一个正常的授权系统,所以也许这很有趣。

任何帮助将不胜感激。先感谢您!(PS:我希望我已经为这个问题提供了足够的信息)

标签: c#sessionasp.net-corehttpcontext

解决方案


删除 cookie 会删除跟踪会话状态的 cookie。因此,通过删除 cookie,您实际上是在删除会话状态并强制创建一个新状态。所以:

  1. 请求1,它在会话中设置整数。
  2. 请求 2 使用整数设置会话,然后删除会话 cookie,该会话 cookie 在没有 cookie 的情况下建立新会话。
  3. 请求 3 获取不包含整数的新会话。

推荐阅读