在 Global.asax 中,会话状态在此上下文中不可用。

3

当我尝试在Global.aspx中获取Session值时,出现错误消息:

enter image description here

我尝试了另一种获取会话值的方法,结果相同但信息不同:

enter image description here

这个错误出现在Application_Error方法中,会话不为空,但显示为空。我将此会话代码放在(HttpContext.Current.Session != null)条件中,因此它可以正常工作,但我想获得此方法未获取的会话值。

enter image description here

请帮我。 谢谢

3个回答

3

全局文件(Global.asax)通常用于跟踪应用程序级别事件,这些事件可在不同的登录用户之间共享,因此可能无法在Global.asax事件中获取会话(session)值。

对于错误日志记录,您可以使用httpModule。

以下链接介绍了如何使用httpModule进行错误日志记录:

http://www.codeproject.com/Articles/16171/An-HTTP-Module-for-ASP-NET-Error-Handling

以下链接介绍了如何在httpModule中获取会话(session)值:

Can I access session state from an HTTPModule?


1
应用程序错误会捕获应用程序中的所有异常。您的错误可能来自于没有会话的地方。(快速示例:来自异步操作或自定义创建的线程)最好的测试方法是在尝试使用会话之前测试HttpContext.current != null和HttpContext.current.session != null。而且,使用会话本身就不好。对于您最后一个观点:如果您在应用程序错误之外的任何其他位置设置断点,则您的有故障的线程/异步操作可能会在Visual Studio停止进程之前完成操作。因此,在这种情况下,您可以拥有会话,而在正常运行(没有断点)时,您将收到异常。

1
尝试这个...
string value = HttpContext.Current.Session["user"] as string;

if (String.IsNullOrEmpty(value))
{
    //your Code here
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接