Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何检查asp会话是否有效?_Asp.net_Session - Fatal编程技术网

Asp.net 如何检查asp会话是否有效?

Asp.net 如何检查asp会话是否有效?,asp.net,session,Asp.net,Session,Im使用由aspnet_状态管理的outproc会话。有时我会收到运行时错误,说会话无效。所以我想检查会话是否对我提出的每个请求都有效。但是我找不到一个合适的方法来使用Java 这是我现在在page_preinit事件中使用的代码。它看起来很难看,但可以工作 Try Dim x = Session.Keys().Item(0) Catch ex As Exception Session

Im使用由aspnet_状态管理的outproc会话。有时我会收到运行时错误,说会话无效。所以我想检查会话是否对我提出的每个请求都有效。但是我找不到一个合适的方法来使用Java

这是我现在在page_preinit事件中使用的代码。它看起来很难看,但可以工作

            Try
                Dim x = Session.Keys().Item(0)
            Catch ex As Exception
                Session.Clear()
            End Try
有人知道更好的方法吗


谢谢

您可以尝试检查上下文对象

C#

VB(此处使用C#到VB的转换器..不确定是否正确)


如果您使用的是表单身份验证,并且设置正确,则应该为您重定向。如果您仍然需要显式,我建议将此类代码放在Global.asax或每个页面可以派生的基类中,而不是将其添加到每个请求中。

实际上,我通过检查会话的第一个元素(session.item(0))解决了问题 我把代码放在try-catch中。如果出现异常,我只需清除会话。此代码位于“我的所有页面”的基本页面中

因此,在preinit事件中,我的代码如下所示

Private Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
    Try
        Dim x = Session.Keys().Item(0)
    Catch ex As Exception
        Session.Clear()
    End Try
End Sub
这看起来很难看,但确实解决了我的问题


谢谢大家。

只需检查会话。计数而不是尝试访问错误处理块中的第一项…

您得到的确切运行时消息是什么?这不会让人感到意外,您测试上述内容的方式是基于空引用异常的,这种异常也会发生在新/空会话而不是无效会话上。您是否使用表单身份验证?奥利:会话确实存在(不是空的),但访问任何元素都会引发异常。这只会在我的开发机器上不时发生,就像我做了很多构建/重建PortageOnKey:不,我没有使用来自身份验证的代码我正在使用的代码在基本页上。但是会话确实存在,并且它不是空的。访问eny元素将引发异常。只要重新启动asp_net会话,问题就会出现,或者在代码中我会清除它。我使用的代码确实解决了我的问题,但我想知道是否还有其他代码可以解决。这听起来像是会话信息(键)没有正确填充的问题,而不是会话超时的问题。我们在使用aspnet_状态数据库时遇到了类似的问题。我们的方法是,除了检查null之外,还尝试访问会话密钥,以验证aspnet_state DB是否返回了有效的会话对象。至于aspnet_state DB返回的坏会话的根本问题…仍然没有解决该问题,因为计数是正确的,所以计数没有帮助。会话中有元素,但由于某种原因它们已损坏。您可以通过使用out-proc会话复制它,在它运行一段时间(大量访问)后,它将开始崩溃。这可能是内存问题。我没有彻底调查它,但尝试捕捉对我来说很好。
If Context.Session IsNot Nothing Then
    'Redirect to login page etc
End If
Private Sub Page_PreInit(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreInit
    Try
        Dim x = Session.Keys().Item(0)
    Catch ex As Exception
        Session.Clear()
    End Try
End Sub