5

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

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. 确定是否已设置 Session 变量的所有测试均采用以下形式IsEmpty(Session("myVar"))
  2. 所有会话变量都是Removed 且未设置= ""
4

2 回答 2

3

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

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

它会写出“True”。

这意味着测试Not IsEmpty(myvar)等同于测试myvar <> ""IsEmpty(myvar)不等同于. 这种主要是理论上的差异是否会困扰您,只有您可以回答,但就个人而言,我不会浪费时间进行重构。myvar = ""


如果您确实决定重构,我建议您忘记诸如此类的事情IsEmptyIsNull而只使用& ""“hack”:

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

这将透明地处理 NullEmpties,而无需编写一大堆代码。

于 2016-07-29T17:14:07.750 回答
0

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

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

VarType——返回一个表示变量子类型的值。

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

请看一下什么是'<>' asp运算符?

于 2016-08-02T12:28:45.257 回答