Formularwerte mitschleifen...
legolas41
- asp.net
Hallo!
Ich würde gerne ein Script schreiben, dass es mir ermöglicht, zu erkennen, ob Formularwerte gesendet wurden. Anschließend soll das Script, wenn Formularwerte gesendet wurden, diese empfangen, einen "input type=hidden" Befehl in den HTML-Quelltext schreiben und diese dann weiterschicken.
Das ganze wäre praktisch für ein Passwort Script, dass ich geschrieben habe. Per Include wird das Passwort Script in jede HTML-Seite eingefügt, die administrative Möglichkeiten anbietet.
Kennt einer die nötigen Befehle, um:
1. wurden Daten gesendet, diese entgegennehmen
2. einen <input type="hidden"> befehl erzeugen, mit dem richtigen namen
Vielen Dank
Grüße
Legolas
Hallo Legolas
Kennt einer die nötigen Befehle, um:
- wurden Daten gesendet, diese entgegennehmen
Ob Daten gesendet wurden erkennst du mit
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then...
und
If Request.ServerVariables("REQUEST_METHOD") = "GET" Then...
Du solltest jedoch wissen, wie die gesendeten Daten heissen. Das könnte dann etwa so aussehen:
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then
strUser = Request.Form("Username")
strPass = Request.Form("Password")
End If
- einen <input type="hidden"> befehl erzeugen, mit dem richtigen namen
Anscheinend weisst du jedoch nicht, wie die Namen sind. In diesem Fall kenne ich zumindest für die Get-Methode einen Weg: Du liest den ganzen Query-String aus und zerlegst ihn mit Stringoperationen in seine Bestandteile. Mit diesen füllst du ein Array und erzeugst daraus dan die <input type="hidden">-Tags.
MfG & HtH
Tom2
hi!
das sollte auch noch einfacher gehen...
<%
strUser = Request("User")
strPass = Request("pass")
If Not strUser = vbNullString And Not strPass = vbNullString Then
...
Else
...
End If
%>
einfach nur das request-object ohne seine methode abzufragen, ist zwar nicht grade grandioser programmierstil - der server findet diese aber schneller, was natürlich auch die script-performance verbessert.
ich würde allerdings auch keine logindaten sondern eher die sessionID transportieren - die ist ja auch eindeutig.
hi!
das sollte auch noch einfacher gehen...
<%
strUser = Request("User")
strPass = Request("pass")
If Not strUser = vbNullString And Not strPass = vbNullString Then
...
Else
...
End If
%>
einfach nur das request-object ohne seine methode abzufragen, ist zwar nicht grade grandioser programmierstil - der server findet diese aber schneller, was natürlich auch die script-performance verbessert.
ich würde allerdings auch keine logindaten sondern eher die sessionID transportieren - die ist ja auch eindeutig.
Hi Chief,
die gesamt Request-Auflistung ohne Benutzung der entsprechenden Unterauflistung abzufragen bedeutet nach einhelliger Literaturmeinung von MS Press und meiner MCP-Seminarleiter:
1. Request.ServerVariables durchsuchen
dann erst Request.QueryString/Request.Form
und dauert länger, weil der Server dadurch mehr Arbeit hat, ist eigentlich auch logisch, oder?
also weniger (schneller findet = bessere Scriptperformance), aber das fällt bei wenigen Aufrufen nicht so ins gewicht.
zwischen "" und vbNullString konnte ich bislang auch keinen Unterschied feststellen, außer dass es sich länger tippt als "" :-)
Gruß, Frank
Hi Chief,
die gesamt Request-Auflistung ohne Benutzung der entsprechenden Unterauflistung abzufragen bedeutet nach einhelliger Literaturmeinung von MS Press und meiner MCP-Seminarleiter:
- Request.ServerVariables durchsuchen
dann erst Request.QueryString/Request.Form
und dauert länger, weil der Server dadurch mehr Arbeit hat, ist eigentlich auch logisch, oder?
also weniger (schneller findet = bessere Scriptperformance), aber das fällt bei wenigen Aufrufen nicht so ins gewicht.
zwischen "" und vbNullString konnte ich bislang auch keinen Unterschied feststellen, außer dass es sich länger tippt als "" :-)
Gruß, Frank
hi, frank!
nix für ungut...
...aber wenn du mir nicht glaubst, dann mache doch mal folgenden kleinen test:
<%
a = Timer
For i = 0 To 10000
b = Request.QueryString("test")
Next
Response.Write "mit Methode: " & Timer - a
a = Timer
For i = 0 To 10000
b = Request("test")
Next
Response.Write "ohne Methode: " & Timer - a
%>
lass dich vom ergebnis überraschen und vergiss, was die M$ler so zu ihren eigenen produkten von sich geben... ;-)
das gleiche spielchen funzt übrigens auch sehr gut mit anderen objekten - z.b. ist 'objRS("myField")' bedeutend schneller als 'objRS.Fields.Item("myField").Value'...
grtz
chief
Hi Leute
Interessante Sachen lernt man hier - Chief, wo krieg ich solche Infos her?
Noch eine kleine Überlegung zu den beiden Lösungen: Ist es in diesem Beispiel nicht besser, die Request-Methode abzufragen und dann aufgrund des Ergebnisses die Formulardaten auszulesen oder eben nicht. Meine Begründung zur Annahme: Der Login steht AFAIK nur so auf der Seite, man wird sich folgich nicht jedes mal (oder eher selten) einloggen. Es muss also immer nur _eine_ Bedingung gechecked werden und nicht pro Formular-Feld eine Zuweisung und zum Schluss noch eine Bedingung.
Was natürlich sein könnte, ist, dass das Abfragen der Server-Variablen einiges länger dauert als die Zuweisungen und ein normaler Vergleich zweier Variablen. In diesem Fall wäre deine Lösung, Chief, natürlich schneller. Das weiss ich jedoch noch nicht, beim Thema Performance bin ich noch nicht angelangt.
MfG
Tom2
Interessante Sachen lernt man hier - Chief, wo krieg ich solche Infos her?
das sind im grunde reine erfahrungswerte, würde ich sagen - wenn man alltäglich viele stunden mit ASP und VBS verbringt, ergibt sich einiges... ;-)
Noch eine kleine Überlegung zu den beiden Lösungen: Ist es in diesem Beispiel nicht besser, die Request-Methode abzufragen und dann aufgrund des Ergebnisses die Formulardaten auszulesen oder eben nicht. Meine Begründung zur Annahme: Der Login steht AFAIK nur so auf der Seite, man wird sich folgich nicht jedes mal (oder eher selten) einloggen. Es muss also immer nur _eine_ Bedingung gechecked werden und nicht pro Formular-Feld eine Zuweisung und zum Schluss noch eine Bedingung.
Was natürlich sein könnte, ist, dass das Abfragen der Server-Variablen einiges länger dauert als die Zuweisungen und ein normaler Vergleich zweier Variablen. In diesem Fall wäre deine Lösung, Chief, natürlich schneller. Das weiss ich jedoch noch nicht, beim Thema Performance bin ich noch nicht angelangt.
ich würde dir einfach dazu raten, nach erfolgreichem login eine session-variable anzulegen...
z.b.: Session("login") = True
dann brauchst du beim seitenaufruf nur abzufragen...
If Not Session("login") Then
...nun folgt die loginprozedur bzw. der Redirect auf die login-seite
grtz
chief
Hi Chief,
mit ner DB hab ich das jetzt mal gestestet....
erstmal nur mit einem Zugriff... über mehrere Runden:
Dabei hat sich ergeben, das dein Tip
Zugriffszeit(rs(Name)) < Zugriffszeit(rs.fields.item(Name)) um ca. 1 bis 1,5 sek. schneller ist unter folgenden Voraussetzungen:
Tabelle mit 8 Feldern, 1200 Datensätzen
Anschluß per OLEDB JET 4.0
auf Win2K Pro
Zufällige Auswahl eines möglichen Feldnamens bei jedem Datensatz
500 Durchläufe aller Datensätze
seltsamerweise lähmt das meinen PC hier aber dermaßen ??? das alles nur Ruckhaft geht... andersherum scheinen aber Aktionen wie mit Outlook Mails schreiben keinerlei Einfluss auf die Performance des Datenabrufs zu haben... komisch.
Interessant ist weiterhin, daß man anscheinend durch entsprechendes Tuning die Verarbeitungszeit um ca. 50% senken kann...
Ich werde jetzt mal versuchen mittels wget 25 simultane Benchmarks zu fahren...
Als denn, Frank
deine Request.... sache teste ich auch noch, und wehe ich bekomme was anderes raus, dann wirst du exkommuniziert ;-)
Hi Chief,
die gesamt Request-Auflistung ohne Benutzung der entsprechenden Unterauflistung abzufragen bedeutet nach einhelliger Literaturmeinung von MS Press und meiner MCP-Seminarleiter:
- Request.ServerVariables durchsuchen
dann erst Request.QueryString/Request.Form
und dauert länger, weil der Server dadurch mehr Arbeit hat, ist eigentlich auch logisch, oder?
also weniger (schneller findet = bessere Scriptperformance), aber das fällt bei wenigen Aufrufen nicht so ins gewicht.
zwischen "" und vbNullString konnte ich bislang auch keinen Unterschied feststellen, außer dass es sich länger tippt als "" :-)
Gruß, Frank
hi, frank!
nix für ungut...
...aber wenn du mir nicht glaubst, dann mache doch mal folgenden kleinen test:
<%
a = Timer
For i = 0 To 10000
b = Request.QueryString("test")
Next
Response.Write "mit Methode: " & Timer - a
a = Timer
For i = 0 To 10000
b = Request("test")
Next
Response.Write "ohne Methode: " & Timer - a
%>
lass dich vom ergebnis überraschen und vergiss, was die M$ler so zu ihren eigenen produkten von sich geben... ;-)
das gleiche spielchen funzt übrigens auch sehr gut mit anderen objekten - z.b. ist 'objRS("myField")' bedeutend schneller als 'objRS.Fields.Item("myField").Value'...
grtz
chief
Hi Chief,
das werd ich mal ausprobieren.... ist mir noch nicht geläufig, aber ich lasse mich gern vom Gegenteil inspirieren...
werde dann mal das Ergebnis posten. :-)
tschau, Frank
Hallo!
Ich würde gerne ein Script schreiben, dass es mir ermöglicht, zu erkennen, ob Formularwerte gesendet wurden. Anschließend soll das Script, wenn Formularwerte gesendet wurden, diese empfangen, einen "input type=hidden" Befehl in den HTML-Quelltext schreiben und diese dann weiterschicken.
Das ganze wäre praktisch für ein Passwort Script, dass ich geschrieben habe. Per Include wird das Passwort Script in jede HTML-Seite eingefügt, die administrative Möglichkeiten anbietet.
Kennt einer die nötigen Befehle, um:
- wurden Daten gesendet, diese entgegennehmen
- einen <input type="hidden"> befehl erzeugen, mit dem richtigen namen
Vielen Dank
Grüße
Legolas
Hi....
du hast die Lösung doch schon fast selbst vorgeschrieben... hier nochmal deutlicher:
für jeden gesendeten Wert in den per Post-Methode gesendeten Daten
schreibe in HTML einen input tag vom typ hidden mit dem Namen des gesendeten Wertes und dessen eigentlichen Wert
weiter mit dem nächsten Wert
allerdings wäre das meines erachtens nach sehr unklug und unsicher, Passwörter für administrative Bereiche/Funktionen im HTML, welches der Client lesen kann (quelltext), zu übergeben. Noch unsicherer, dies sogar über die get-Methode, wo dann das PW explizit in der Adreßzeile steht, zu machen.
entweder du nutzt die Sessions mit ASP, wobei aber der Client Cookies während der Sitzungszeit erlauben muß, dort (Session_Variablen) kann man z.b. speichern, ob authorisiert und wenn ja, wer, wann etc...
oder du übergibst einen Pseudo-Zahlencode, den du mit einer Indexliste vergleichst, die bei "Einlog" Vorgängen um einen Datensatz mit einer bestimmten gültigkeitsdauer erweitert wird.
Wenn du zu den Lösungswegen noch Fragen hast.... das Forum ist dazu da.
Gruß, Frank