gpt4 book ai didi

ASP.NET MVC - session 为空

转载 作者:行者123 更新时间:2023-12-02 08:57:35 26 4
gpt4 key购买 nike

我在 .net4 上有一个 MVC3 应用程序,其 session 在开发环境中工作,但不在生产环境中工作。
在生产中,我记录了 sessionID,它在我从 session 中设置和获取时是相同的。

当我尝试获取 session 时,我收到Null Exception

这是我访问 session 的方式:

public static class HandlersHttpStorage
{
public static string TestSession
{
get
{
return HttpContext.Current.Session["time"];//This is null
}
set
{
HttpContext.Current.Session.Add("time", value);//DateTime.Now.ToString()
}
}
}

让我担心的是,尽管 web.config 是相同的,但生产中的行为与开发中的行为不同。

最佳答案

解决方案1:

链接: HttpContext.Current.Session is null when routing requests

明白了。事实上,很愚蠢。在我删除并添加 SessionStateModule 后它就起作用了,如下所示:

<configuration>
...
<system.webServer>
...
<modules>
<remove name="Session" />
<add name="Session" type="System.Web.SessionState.SessionStateModule"/>
...
</modules>
</system.webServer>
</configuration>

仅仅添加它是行不通的,因为“Session”应该已经在 machine.config 中定义。

现在,我想知道这是否是通常的做法。看起来肯定不是这样,因为它看起来很粗糙......

解决方案2:

链接: HttpContext.Current.Session null item

sessionKey 可能会发生变化,您可能只需要执行以下操作:

HttpContext.Current.Session["CurrentUser"]

或者 session 可能即将过期,请检查超时:

http://msdn.microsoft.com/en-us/library/h6bb9cz9(VS.71).aspx

或者您可能从其他地方设置 session 值,通常我通过一个属性控制对 Session/Context 对象的访问

static readonly string SESSION_CurrentUser = "CurrentUser";

public static SiteUser Create() {
SiteUser.Current = new SiteUser();
return SiteUser.Current;
}

public static SiteUser Current {
get {
if (HttpContext.Current.Session == null || HttpContext.Current.Session[SESSION_CurrentUser] == null) {
throw new SiteUserAutorizationExeption();
}
return HttpContext.Current.Session[SESSION_CurrentUser] as SiteUser;
}
set {
if (!HttpContext.Current.Session == null) {
HttpContext.Current.Session[SESSION_CurrentUser] = value;
}
}
}

关于ASP.NET MVC - session 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10629882/

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