我在登录页面保存 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 变量。它只能在保存它的同一页面上访问。
我可能做错了什么?
最佳答案
我不得不更改我之前评论的整个上下文。这是“正确答案”。
只需确保您已检查以下步骤:
-
services.AddDistributedMemoryCache()
内存配置用于缓存。 -
services.AddSession()
您已配置 session 。 - 这就是人们犯错误的地方
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/