2014-02-18 214 views
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 

回答

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

在過去做了這樣的事情,生成了一個[tag:rc4-cipher]加密的id,然後[tag:base64]對它進行了編碼,因此可以通過電子郵件進行傳輸並且可以在URL中使用而不會被破壞,會話值剛剛獲得不要削減它。 – Lankymart

+0

它最初是一個8位數字,但我希望它是用戶友好的我現在意識到這一點,我打算使用一個生成器,使用字母表中的所有字母,然後數字1-9生成一個10位數的唯一代碼:) – Kieranmv95

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