gpt4 book ai didi

session - 如何在代码中检测 session 是否已启用而不是仅仅收到错误

转载 作者:行者123 更新时间:2023-12-02 17:03:41 24 4
gpt4 key购买 nike

如果我设置

@ENABLESESSIONSTATE = false

然后

session("foo") = "bar"

那么结果就是

Microsoft VBScript runtime error '800a0114'
Variable is undefined 'Session'
... file and line no

这通常表明有关程序流程的错误假设,我会跟踪并修复问题。

但是,在特定的情况下,我遇到这样的情况:每次页面请求时总是首先调用一段使用 session 的代码。它与性能监控有关。

此代码包含一个 fork - 如果用户有 session ,我们就走一种方式,如果没有,我们就走另一种方式。

但是,当然,如果用户 session 不存在,因为我们引入了一些在禁用 session 的情况下运行的代码,我们就会崩溃。

我可以解决它

on error resume next 
session("foo") = "bar"
if err.number <> 0 then

' do the no-has-session fork

else

' do the has-session fork
end if
on error goto 0

但我想知道是否有一种不那么老套的方法。

最佳答案

为了让这个问题显示出可接受的答案......

关于使用 isObject() 方法的建议,结果并不好。下面的ASP...

<%@EnableSessionState=False%>
<% option explicit

response.write "session enabled=" & IsObject(Session)
response.end

%>

结果

Microsoft VBScript runtime error '800a01f4'

Variable is undefined: 'Session'

/errortest.asp, line 6

因此, session 对象似乎被标记为确实尚未声明。

我的结论是构造一个如下函数。

<%@EnableSessionState=False%>
<% option explicit

response.write "session enabled=" & isSessionEnabled() ' <-- returns false
response.end

function isSessionEnabled()
dim s

isSessionEnabled = true ' Assume we will exit as true - override in test
err.clear() ' Clear the err setting down
on error resume next ' Prepare to error

s = session("foobar") ' if session exists this will result as err.number = 0

if err.number <> 0 then
on error goto 0 ' reset the error object behaviour
isSessionEnabled = false ' indicate fail - session does not exist.
exit function ' Leave now, our work is done
end if
on error goto 0 ' reset the error object behaviour
end function ' Returns true if get to this point

%>

然后将其用作

If isSessionEnabled() then
' do something with session
else
' don't be messin with session.
end if

关于session - 如何在代码中检测 session 是否已启用而不是仅仅收到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53204393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com