ASP会话变量:是""和IsEmpty一样吗?

时间:2016-07-29 16:09:49

标签: asp-classic session-variables is-empty defaultifempty

在ASP中,未初始化的Session变量为Empty。我知道检查会话值和删除值的正确方法如下:

IF NOT IsEmpty(Session("myVar")) THEN
  ' Go ahead and use Session("myVar")
  ...
  ' Now if we're all done with myVar then remove it:
  Session.Contents.Remove("myVar")
END IF

我继承了一个代码库,其中Application和Session变量通常在使用后设置= "",并且值的所有测试都是(Sessions("myVar") = "")形式。当Session变量未被声明时,此测试出现 ,或者它可能只是运气不好。

使用与空字符串的比较来测试Session变量是否安全?即,以下是"几乎同样好的"作为上面显示的正确方法?

IF Session("myVar") <> "" THEN
  ' Go ahead and use Session("myVar")
  ...
  ' Now if we're all done with myVar then blank it:
  Session("myVar") = ""
END IF

或者我应该重构代码库,以便:

  1. 确定是否已设置会话变量的所有测试都采用IsEmpty(Session("myVar"))
  2. 形式
  3. 所有会话变量均为Remove d且未设置= ""

2 个答案:

答案 0 :(得分:3)

Empty是一个奇怪的野兽:它同时等于""0。说真的,试试吧:

dim x, y, z
x = Empty
y = ""
z = 0
Response.Write (x = y) AND (x = z)

它会写出&#34; True&#34;。

这意味着对Not IsEmpty(myvar)的测试相当于测试myvar <> "",但IsEmpty(myvar) 等同于myvar = ""。理论上的差异是否会让你感到困扰只是你可以回答的问题,但就个人而言,我不会在重构上浪费时间。

如果你决定重构,我会建议忘记IsEmptyIsNull等等,只使用& ""&#34; hack& #34;:

If Session("myvar") & "" <> "" Then

这样可以透明地处理Nulls Empties,而无需编写大量代码。

答案 1 :(得分:0)

不,这可能不安全。也许您需要使用函数:IsNullIsEmptyVarType

  

IsNull - 如果表达式为Null则返回True,即它包含no   有效数据;否则,IsNull返回False。如果表达式由   多个变量,任何组成变量中的Null都会导致True   为整个表达式返回。

     

VarType - 返回表示变量子类型的值。

     

IsEmpty - 如果变量未初始化,则返回True,或者是   显式设置为Empty;否则,返回False。总是假的   如果表达式包含多个变量,则返回。

请查看What is the '<>' asp operator?