停止被覆盖的会话

时间:2014-02-18 09:40:58

标签: html session random asp-classic client-side

我有一段代码生成1到1000之间的随机数。然后它将该数字存储为会话。然后,您将收到一封电子邮件,其中包含打印到表单中的会话编号并提交,但问题是每当您提交表单(页面上有两个)时,它会刷新随机数并重置会话,使您的代码无效。我怎么能阻止这个?

以下是我目前的问题;

HTML

    <form action="cantaccess.asp" method="post">
         <p>Email:<input type="text" name="inputtedEmail" value="" /></p>
         <input type="submit" name="submitEmail" value="submit" />
    </form>

    <form action="cantaccess.asp" method="post">
         <p>Code:<input type="text" name="inputtedCode" value="" /></p>
         <input type="submit" name="submitCode" value="submit" />
    </form>

ASP

    'Declares the variable for the random number which will be sent and stored
    Dim uniqueCode

    'initialising the randomize generator
    Randomize()

    'genarating a random number between 1 and 1000
    uniqueCode = CInt(Int((1000*Rnd()) + 1))

    'writing it out for testing purposes
    response.write(uniqueCode)

    'store it as a session to save the code when the form is submitted
    Session("generatedCode") = uniqueCode
    Session.Timeout= 1

2 个答案:

答案 0 :(得分:1)

If request.form("submitEmail") = "submit" then
 '## Your code for generate random number
Else
 '## Your code for verify previously generated random number
End If

答案 1 :(得分:1)

我认为你遇到的主要问题是会话超时(标准的20分钟)之后你无法访问发送的随机数,因为你只将它存储在会话变量中。

现在,用户访问您网页的唯一方法是,当他收到会话超时值中包含“代码”的电子邮件时,并在此期间重新访问您的网站。

您必须以其他方式(例如数据库)保留该号码和相应的电子邮件地址。

如果您真的想要按照描述解决方案的方式实现它,那么您将检查表单字段“输入”值是否存在。如果存在,则不得生成随机数。

if request.form("inputted") <> "" and isnumeric(request.form("inputted")) and request.form("inputted") >= 1 and request.form("inputted") <= 1000 then
    if request.form("inputted") =  Session("generatedCode") then
        ' the session value and the inputted value are equal but you are not sure that the user you sent the code has entered it in your form!
    end if
else
    'generate random number and store it and send email
end if

另一个想法:您是否根据您发送的电子邮件地址检查输入的随机数?否则,我可以尝试填写表格并输入一些号码并访问禁止页面,而不会收到带有“代码”的电子邮件。 1000种可能性并不多。