c# - Asp.Net Core Razor 页面,无法从其他 View /razor 模型访问 session 变量

标签 c# asp.net-core session-variables asp.net-core-2.1 razor-pages

我在登录页面保存 session 变量,

Guid sessionId = Guid.NewGuid();

HttpContext.Session.SetString("sessionId",sessionId.ToString());
Response.Cookies.Append("sessionId", sessionId.ToString());

现在我像这样访问这个变量:

string sessionId = Request.Cookies["sessionId"];            

if (!String.IsNullOrEmpty(sessionId) && sessionId.Equals(HttpContext.Session.GetString("sessionId")))
{
    return RedirectToPage("/LoggedIn/Index");
}

return Page();

我在声明 session ID 的同一个 razor 页面(登录页面)上使用此代码,但是如果我在任何其他 razor View 页面中使用上述代码,我将无法访问此 session 变量。它只能在保存它的同一页面上访问。

我可能做错了什么?

最佳答案

我不得不更改我之前评论的整个上下文。这是“正确答案”。

只需确保您已检查以下步骤:

  1. services.AddDistributedMemoryCache()内存配置用于缓存。
  2. services.AddSession()您已配置 session 。
  3. 这就是人们犯错误的地方app.UseSession()必须在 app.UseCookiePolicy() 之后调用和之前 app.UseMvc() .

**请注意 RedirectToPage() call 根本不影响/改变 session 变量。 **

这些步骤看起来很简单,但实际上第 3 步就是您要寻找的答案。您的代码看起来非常好。

这是 Rick Anderson 和 Steve Smith 概述的中间件排序 https://learn.microsoft.com/en-us/aspnet/core/fundamentals/middleware/index?view=aspnetcore-2.2#order

有时问题可能是由 CheckConsentNeeded = context => true 引起的在配置 CookiePolicyOptions 时设置为 true。如果你有 <CookiePolicyOptions>,只需将它设置为 false配置。如果你想让它保持为真,你必须配置 cookie并设置 Cookie.IsEssential = true;然后 session 将在任何重定向操作中存活。

关于c# - Asp.Net Core Razor 页面,无法从其他 View /razor 模型访问 session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53172970/

相关文章:

c# - ASP.NET 错误事件日志源属性的自定义值

.net - 如何检查.NET Core中是否存在配置节?

nginx - Nginx 背后的 SignalR - 获得 200 响应而不是 websocket 升级

key 存在时出现 Django Session KeyError

c# - .NET Lambda 传递方法参数

c# - Xamarin.UI 测试 NU1201 错误 : Android 8. 1 与 .NET Framework 4.6.1 不兼容

c# - 将不可搜索的 Stream 转换为 byte[] 给出 ArgumentOutOfRangeException

c# - Asp.Net Core 2 中是否有相当于 "HttpContext.Response.Write"的值?

php - 登录页面传递 $_SESSION

javascript - 纯 JavaScript 中的 Zendesk 注销功能