在Postback之后丢失会话

时间:2010-09-01 11:14:55

标签: c# asp.net

我一直在我的asp.net应用程序中使用会话变量来传递下一个属性:

[DefaultValue(true)]
public bool IsModificationMode
{
    get
    {
        return (bool)Session["ModificationMode"];
    }
    set { Session["ModificationMode"] = value; }
}

在PageLoad中,我设置了它的值。

现在在Postback之后,我失去了它的值,有一个NullReferenceException

5 个答案:

答案 0 :(得分:4)

 <modules runAllManagedModulesForAllRequests="true">
            <remove name="Session" />
            <add name="Session" type="System.Web.SessionState.SessionStateModule" />
            <remove name="ScriptModule" />

如果在完成上述操作后仍然没有快乐,则需要添加会话状态模块......

答案 1 :(得分:3)

我赞成@stacknewbee因为我同意他关于应用程序池自我回收的想法。作为解决方案,尝试通过将web.config条目从InProc更改为StateServer来解除会话状态与w3wp.exe进程的连接:

<sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" timeout="30"/>

请记住,必须启动服务器服务ASP.Net State Server。

答案 2 :(得分:1)

问题可能是因为, 1.您要么在代码中的某处清除会话,要么 2.您的应用程序池正在被回收,导致您丢失会话信息。检查您的代码,检查eventvwr以查找应用程序回收消息。

答案 3 :(得分:1)

这是一个Web场,多个服务器?您可能需要会话的SQL持久性,因此它跨越服务器。您的应用程序是否在回发之间以任何理由回收?内存中的会话状态将丢失。回发之间有多长时间?你的会话超时(我认为默认为20分钟)?你确定你真的设定了价值吗?不要笑 - 我已经做到了。

而且,你绝对肯定你需要使用会话状态吗?可以查看状态工作吗?

答案 4 :(得分:0)

感谢您的所有回复 这是条目[SessionState],我在Web.config中错过了它: