У меня есть фрагмент кода, который генерирует случайное число от 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
Я думаю, что основная проблема заключается в том, что после таймаута сеанса (стандартные 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 возможностей не так много.
If request.form("submitEmail") = "submit" then
'## Your code for generate random number
Else
'## Your code for verify previously generated random number
End If