会话状态变量未为所有用户设置

Session state variable not setting for all users

我有以下代码:

  public async Task<IActionResult> OnPost(string PaRes)
    {
        GenerateAbsoluteURLs();

        if (string.IsNullOrEmpty(PaRes))
        {
            throw new Exception($"BAR OnPost() PaRes param string missing from initial response");
        }

        try
        {
            HttpContext.Session.SetString("PaRes", PaRes);
        }
        catch (Exception)
        {
            throw new Exception($"BAR OnPost() Could not set session variables");
        }

        string _PaRes;

        try
        {
            _PaRes = HttpContext.Session.GetString("PaRes");
        }
        catch (Exception)
        {
            throw new Exception($"BAR OnPost() Could not get session variables");
        }

        if (string.IsNullOrEmpty(_PaRes))
        {
            throw new Exception($"BAR OnPost() PaRes retrieved null");
        }

        await Task.CompletedTask;

        return Page();
    }

    public async Task<JsonResult> OnPostCompleteProcessResponse(string result)
    {
        string _PaRes;

        try
        {
            _PaRes = HttpContext.Session.GetString("PaRes");
        }
        catch (Exception)
        {
            throw new Exception($"BAR OnPCPR() Could not get session variables");
        }

        if (string.IsNullOrEmpty(_PaRes))
        {
            throw new Exception($"BAR OnPCPR() PaRes retrieved null");
        }

    }

该页面最初是通过 OnPost() 请求调用的。

OnPostCompleteProcessResponse() 在页面加载时通过 ajax 获得调用。

在调试期间,OnPostCompleteProcessResponse() 在 OnPost() 之后完成。

上面的代码抛出异常:“BAR OnPCPR() PaRes 检索到空值”,因为在过去一周左右的时间里越来越多的用户。好像都在用Chrome,不知道跟这个有没有关系

在 Startup.cs 内,我设置了:

services.Configure<CookiePolicyOptions>(options =>
        {
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => false;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

我无法理解上述情况是如何发生的。我考虑过禁用 cookie,但它在上周影响了将近 50% 的用户,这似乎很高肯定可以把它归结为这个,只是出乎意料?

谁能帮我指明正确的方向?

谢谢。

编辑: 这现在发生在我和其他人身上,而且只发生在 Chrome。我会说现在几乎是 100%。上周我们中的一些人免疫了,甚至在 Chrome,但本周,我们也受到了影响。即使在调试模式下,OnPost() 也会先运行,并且可以检索会话变量。一秒钟后,当调用 OnPostCompleteProcessResponse() 时,会话变量被清除。 Debug/Use 任何其他浏览器,都不是问题! Chrome 有什么不同?

编辑: 将以下内容添加到 Startup.cs 看起来可以修复 Chrome(到目前为止,需要进行更多测试):

   services.AddSession(options =>
        {
            options.Cookie.SameSite = SameSiteMode.None;
            options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
            options.Cookie.IsEssential = true;
        });

使用这种方法,我是否需要担心较旧的浏览器支持,例如浏览器检测?如果是这样,我该如何修改这段代码来处理?别忘了我不是直接设置 cookie,我是在页面代码本身设置会话变量。

看来这就是问题所在,一段时间以来一切正常 运行,所以只需要 Startup.cs:

中的正确 cookie 政策
   services.AddSession(options =>
        {
            options.Cookie.SameSite = SameSiteMode.None;
            options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
            options.Cookie.IsEssential = true;
        });