我正在使用由aspnet_state管理的outproc会话。有时我会遇到运行时错误,说会话无效。所以我想检查会话是否对我发出的每个请求都有效。但我找不到像this Question中那样使用Java的正确方法。
以下是我现在在page_preinit事件中使用的代码。它看起来很丑,但它确实有效。
Try
Dim x = Session.Keys().Item(0)
Catch ex As Exception
Session.Clear()
End Try
有人知道更好的方法吗?
由于
答案 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,而不是尝试访问错误处理块中的第一项......