5

ASP では、初期化されていないセッション変数が空です。セッション値を確認して値を削除する正しい方法は次のとおりです。

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 変数が宣言されていない場合に機能するように見えます...または、運が悪かっただけかもしれません。

空の文字列との比較を使用してセッション変数をテストしても安全ですか? つまり、次の方法は、上記の正しい方法と「実質的に同じ」でしょうか?

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. すべてのセッション変数は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 = ""を意味します。そのほぼ理論的な違いが気になるかどうかは、あなただけが答えることができるものですが、個人的には、リファクタリングに時間を無駄にするつもりはありません。


リファクタリングすることにした場合は、 IsEmptyandなどを忘れて、 「ハック」IsNullを使用することをお勧めします。& ""

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

これにより、大量のコードを記述する必要なく、Nullと空を透過的に処理できます。

于 2016-07-29T17:14:07.750 に答える
0

いいえ、安全ではない可能性があります。おそらく、次の関数を使用する必要があります: IsNullIsEmptyおよびVarType

IsNull -- 式が Null の場合、つまり有効なデータが含まれていない場合は True を返します。それ以外の場合、IsNull は False を返します。式が複数の変数で構成される場合、構成変数のいずれかが Null の場合、式全体に対して True が返されます。

VarType -- 変数のサブタイプを示す値を返します。

IsEmpty -- 変数が初期化されていない場合、または明示的に Empty に設定されている場合は True を返します。それ以外の場合は False を返します。式に複数の変数が含まれる場合、常に False が返されます。

'<>' asp 演算子とは?をご覧ください。

于 2016-08-02T12:28:45.257 に答える