Остановите переписывание сессии

0

У меня есть фрагмент кода, который генерирует случайное число от 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
Теги:
asp-classic
session
random
client-side

2 ответа

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 возможностей не так много.

  • 0
    Сделано что-то подобное в прошлом: генерировался зашифрованный идентификатор rc4-шифра, затем base64 его кодировал, чтобы его можно было передавать по электронной почте и использовать в URL-адресе без повреждения, значения сеанса просто не будут его сокращать.
  • 0
    Первоначально это была 8-значная цифра, но я хотел, чтобы она была удобной для пользователя, теперь я понимаю, что собираюсь использовать генератор, который использует все буквы алфавита, а затем цифры 1-9, чтобы сгенерировать 10-значный уникальный код :)
1
If request.form("submitEmail") = "submit" then
 '## Your code for generate random number
Else
 '## Your code for verify previously generated random number
End If

Ещё вопросы

Сообщество Overcoder
Наверх
Меню