复杂的 IF ELSE 语句

Complicated IF ELSE statement

我对经典还不够熟悉ASP/VBScript。我有以下代码,可以完美满足我的需求。

下面的代码正在检查我的 3 个不同的 cookie 是否为空,并将传入值插入第一个可用的值。如果所有这 3 个 cookie 都有值,那么脚本将重定向到某个页面。

正如我之前所写,这段代码工作正常,但我需要做一些额外的工作:我还想检查我的传入值(即字符串 productID_from_url)是否已经存在于任何这 3 个 cookie 的值(因为我不想要重复的值),如果它存在,则停止脚本并将用户重定向到某个页面。

我希望将它们全部放在一起而不丢失下面代码的功能。 有人可以告诉我我必须做什么吗?

<%
If Request.Cookies("compena") = "" Then
Response.Cookies("compena")=productID_from_url
Response.Redirect(url_epistrofis_epi_tixias)
Else
If Request.Cookies("compdyo") = "" Then
Response.Cookies("compdyo")=productID_from_url
Response.Redirect(url_epistrofis_epi_tixias)
Else
If Request.Cookies("comptria") = "" Then
Response.Cookies("comptria")=productID_from_url
Response.Redirect(url_epistrofis_epi_tixias)
Else
Response.Redirect(url_epistrofis_apo_tixias)
End If
End If
End If
%>

一种简化方法是使用 If..ElseIf..Else 而不是嵌套的 If..Else 结构:

If Request.Cookies("compena") = "" Then
    Response.Cookies("compena") = productID_from_url
    Response.Redirect(url_epistrofis_epi_tixias)
ElseIf Request.Cookies("compdyo") = "" Then
    Response.Cookies("compdyo") = productID_from_url
    Response.Redirect(url_epistrofis_epi_tixias)
ElseIf Request.Cookies("comptria") = "" Then
    Response.Cookies("comptria") = productID_from_url
    Response.Redirect(url_epistrofis_epi_tixias)
Else
    Response.Redirect(url_epistrofis_apo_tixias)
End If

您也可以遍历要检查的 cookie

redirected = False
For Each cookie in Array("compena", "compdyo", "comptria")
    If Request.Cookies(cookie) = "" Then
        Response.Cookies(cookie) = productID_from_url
        Response.Redirect(url_epistrofis_epi_tixias)
        redirected = True
        Exit For
    End If
Next

If Not redirected Then Response.Redirect(url_epistrofis_apo_tixias)

但是除非你有很多值可以比较,否则我认为前者比后者更容易理解。

如果任何 cookie 匹配 productID_from_url 如果您想重定向到其他位置,则代码总体上会变得更加复杂,因为您需要额外的条件或额外的循环来检查 检查空 cookie 之前。

使用第一种方法结合检查的示例:

If Request.Cookies("compena") = productID_from_url Or Request.Cookies("compdyo") = productID_from_url Or Request.Cookies("comptria") = productID_from_url Then
    Response.Redirect(other_redirect_url)
ElseIf Request.Cookies("compena") = "" Then
    Response.Cookies("compena") = productID_from_url
    Response.Redirect(url_epistrofis_epi_tixias)
ElseIf Request.Cookies("compdyo") = "" Then
    Response.Cookies("compdyo") = productID_from_url
    Response.Redirect(url_epistrofis_epi_tixias)
ElseIf Request.Cookies("comptria") = "" Then
    Response.Cookies("comptria") = productID_from_url
    Response.Redirect(url_epistrofis_epi_tixias)
Else
    Response.Redirect(url_epistrofis_apo_tixias)
End If