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

时间:2009-08-28 21:38:29

标签: asp.net session

我正在使用由aspnet_state管理的outproc会话。有时我会遇到运行时错误,说会话无效。所以我想检查会话是否对我发出的每个请求都有效。但我找不到像this Question中那样使用Java的正确方法。

以下是我现在在page_preinit事件中使用的代码。它看起来很丑,但它确实有效。

            Try
                Dim x = Session.Keys().Item(0)
            Catch ex As Exception
                Session.Clear()
            End Try

有人知道更好的方法吗?

由于

3 个答案:

答案 0 :(得分:1)

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

C#

if(Context.Session != null)
{
    //Redirect to login page etc
}

VB(这里使用C#到VB转换器......不确定这是否正确)

If Context.Session IsNot Nothing Then
    'Redirect to login page etc
End If

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

答案 1 :(得分:0)

实际上我通过检查会话的第一个元素(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

这似乎很丑,但它确实解决了我的问题。

谢谢大家。

答案 2 :(得分:0)

只需检查Session.Count,而不是尝试访问错误处理块中的第一项......