Simples Text Captcha mit Classic ASP
Da es anscheinend immer noch solche gibt, die noch mit Classic ASP arbeiten, habe ich mein Captcha Beispel (Simples Text Captcha mit ASP.NET) mit Classic ASP nachgebaut.
Eines vorneweg, es war eine echte Qual, sich wieder die untypisierte, etc... Scriptsprache "VBScript" und "Classic ASP" anzutun, aber wieder mal ein wenig "Back to the roots" schadet auch nicht :-)
Da es bei Eingaben leicht zu Laufzeit-Fehlern in Classic ASP kommt, habe ich anstelle einer Prüfung - die auch fehlschlagen kann, da bspw. IsNumeric() auch Fehlerhaft ist - eine einfache Fehlerbehandlung benutzt.
Zusätzlich verwende ich jetzt ein HiddenField, damit der Label-Text nach einem PostBack wiederhergestellt wird. In ASP.NET geschieht dies automatisch mit Hilfe des ViewStates.
Und damit die Eingabe immer wieder ins Formular-Feld geschrieben wird, reicht ein einfaches (value = Request.Form(<Name>)).
Hier der Code zum studieren (Und zum Vergleich gibts hier das ASP.NET Pendant):
<% Option Explicit %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "<A href="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd</A>">
<html xmlns="<A href="http://www.w3.org/1999/xhtml">http://www.w3.org/1999/xhtml</A>">
<head>
<title>Simples Text Captcha mit Classic ASP</title>
</head>
<body>
<%
Dim s_status, _
s_captcha, _
s_hiddenCaptchaText
'// Wenn das Formular abgeschickt wurde
If Request.Form.Count > 0 Then
'// Validieren und Status anzeigen
If ValidateCaptcha() Then
s_status = "Eingaben korrekt"
Else
s_status = "Eingaben fehlerhaft"
End If
'// Wiederherstellung des aktuellen Captcha-Textes (ViewState kommt hier in ASP.NET zum Zuge)
s_hiddenCaptchaText = Request.Form("hiddenCaptchaText")
s_captcha = s_hiddenCaptchaText
Else
Dim random
Dim num1, _
num2
num1 = CreateRandomNumber(1, 15)
num2 = CreateRandomNumber(1, 15)
s_captcha = CStr(num1) & " + " & CStr(num2) & " ="
s_hiddenCaptchaText = s_captcha
Session("captcha") = num1 + num2
End If
'// Erzeugt eine Zufalls-Nummer zwischen "i_min" und "i_max"
Private Function CreateRandomNumber(i_min, i_max)
Call Randomize()
CreateRandomNumber = CInt((i_max * Rnd) + i_min)
End Function
'// Validiert das Captcha und gibt bei Erfolg "true" zurück
Private Function ValidateCaptcha()
Dim i_sessionValue, _
i_inputValue
On Error Resume Next
i_sessionValue = CInt(Session("captcha"))
i_inputValue = CInt(Request.Form("txtCaptcha"))
If Err.Number <> 0 Then
ValidateCaptcha = False
End If
On Error GoTo 0
ValidateCaptcha = (i_sessionValue = i_inputValue)
End Function
%>
<h1>Simple Captcha (Classic ASP)</h1>
<form id="captchaForm" name="captchaForm" method="post" action="default.asp">
<label for="txtCaptcha"><%= s_captcha%></label>
<input type="text" name="txtCaptcha" id="txtCaptcha" value="<%= Request.Form("txtCaptcha") %>" /><br />
<input type="hidden" name="hiddenCaptchaText" value="<%= s_hiddenCaptchaText %>" />
<input type="submit" name="btnSubmit" value="Abschicken" />
<span><%= s_status%></span>
</form>
</body>
</html>
Benutzung:
Kompletter Code in eine *.asp Datei speichern, das "action"-Attribut des Formulars auf den Dateinamen anpassen und fertig.