字符串比较失败vbscript

时间:2016-05-18 15:07:47

标签: vbscript asp-classic

我有这样的代码

<html>
<head>
    <title></title>
</head>
<body>
    <%
        Function GetGUID()
            GetGUID = CreateObject("Scriptlet.TypeLib").GUID
        End Function

        if Request.ServerVariables("REQUEST_METHOD") = "POST" then
            if session("token") = cstr(Request.Form("csrftoken")) then
                response.write("Same")
            else
                response.write("different")
            end if

        else
            dim token
            token = GetGUID()
            session("token")=token
        end if
    %>
    <form method="post" action="test.asp">
        <input type="text" name="nama" placeholder="Input name">
        <input type="submit" value="submit">
        <input type="hidden" value="<%= session("token") %>" name="csrftoken">
    </form>
</body>
</html>

但是当我点击提交按钮时,总是打印不同的。我非常确定那些变量(session&amp; csrftoken)具有相同的值,因为我已经通过打印这些变量来检查它。

更新

感谢大家的帮助,现在解决了这个问题。这是因为GUID返回以null结尾的字符串。 有关参考,请参阅此处:Link。感谢Lankymart的参考:)

1 个答案:

答案 0 :(得分:0)

不要问我为什么,但是CreateObject("Scriptlet.TypeLib").GUID末尾有两个字符,当它post推送时,它们会以某种方式丢失。我会在发现更多信息后立即更新此答案,但就目前而言,您可以通过将left会话变量按请求变量的长度进行比较来比较所有“真实”字符。像这样:

    if left(session("token"), len(Request.Form("csrftoken"))) = Request.Form("csrftoken")then

另外:您可以使用trim代替cstr。它意味着cstr并修剪字符串。

编辑: 所以“为什么”部分在@Lankymart链接的问题中得到了回答。谢谢!