Session Problem mit IE

 


alexxxus
Veteran

28.07.09
13:33 Uhr
Ich habe gerade nach dieser Anleitung ein Login-Script gebaut mit Session. Funktioniert im Safari, Firefox, Netscape und IE7 auch alles. Aber ich habe auf meinem Windows Laptop zum Testen auch Multiple IEs mit 5, 5.5 und 6 laufen und in keinem klappt das Einloggen.

Die checkuser.php, die auf jeder Seite eingebunden wird und abfragt, ob in der Session eine user_id gesetzt ist leitet jedesmal wieder zum Login-Formular. Ganz offensichtlich ist also die Session nicht mehr da.

Ich habe den Zusammenhang zwischen Session und Cookie auch nicht recht kapiert. Im aktuellen Thread hier wird da ja was als Lösung vorgeschlagen mit Cookie.

Ist das mit den Sessions vielleicht ein gängiges Problem mit diesem vermaledeiten IE, der mit jedesmal den Spaß am Webkram gehörig vermiest oder liegt es evtl. an dieser Multiple IE Geschichte, eine bekannte Einschränkung, oder ist das Problem ganz einfach mit einer Cookie-Irgendwas zu beheben?

Ich wäre für Eure fachmännische Hilfe zutiefst dankbar.
Link zu diesem Beitrag in die Zwischenablage kopieren
Tobi_B
Veteran

28.07.09
13:44 Uhr
tagschön () hörthört
Link zu diesem Beitrag in die Zwischenablage kopieren
alexxxus
Veteran

28.07.09
13:50 Uhr
das baue ich auf jeden fall ein. ich habe gerade sogar danach gesucht hammer
Link zu diesem Beitrag in die Zwischenablage kopieren
Mighty Mike
Veteran

28.07.09
14:05 Uhr
Es reizt mich immer wieder das in alle Kundenseiten einzubauen! D

Hast du, da diese multiblen IEs ja meistens „Tools“ bzw Installationspackete sind, abgecheckt ob da auch cookies gesetzt werden dürfen?

Normalerweise sind die ja nur da um kurz ein layout zu testen. Eventuell wurde, der Sicherheit wegen, da Cookieunterstützung deinstalliert, zusammengelegt oder was weis ich?
Link zu diesem Beitrag in die Zwischenablage kopieren
alexxxus
Veteran

28.07.09
15:43 Uhr
Das ist ja ein Teil meiner Frage.

Ich bin vielleicht einen Schritt weiter. Vielleicht kann mir an der Stelle jemand weiterhelfen:

Wenn die login.php per header auf die eigentlich Seite umleitet habe ich nun die SID als Parameteran die URL gehängt

  1. header ("Location: student/index.php?" . htmlspecialchars(SID));
Quelltext in Zwischenablage kopieren

Vorher wars so, zum Vergleich

  1. header ("Location: student/index.php?");
Quelltext in Zwischenablage kopieren

Mit angehängter SID funktioniert es im IE6. Sie wird auch in der Adresszeile bei IE ausgegeben, bei Safari und Firefox aber nicht.

Warum nicht? Macht das was? Dann könnte ich mir je eigentlich sparen, diesen Umweg auch nur im Falle des IE <= 6 zu machen, was ich eigentlich vorhatte.
Link zu diesem Beitrag in die Zwischenablage kopieren
phloo
Veteran

28.07.09
18:02 Uhr
weil die anderen die SID als Cookie speichern, die IEs offenbar nicht
Link zu diesem Beitrag in die Zwischenablage kopieren
alexxxus
Veteran

28.07.09
18:23 Uhr
Das habe ich mir auch gedacht. Aber wieso wird die SID dann nicht mal in der Adresszeile angezeigt obwohl ichs explizit anhänge? Also bei den anderen Browsern.

Hat denn niemand von Euch das Problem schon mal gehabt?
Link zu diesem Beitrag in die Zwischenablage kopieren
Patric
Veteran

28.07.09
19:04 Uhr
ich hab ein ähnliches login-system laufen und mit ie6 (normal installiert) keinerlei probleme.

ich würde deins ja gerne testen, leider ist mir am samstag mein mainboard abgeraucht und aufm netbook hab ich nur ie7 (
Link zu diesem Beitrag in die Zwischenablage kopieren
Rusty
Veteran

28.07.09
19:47 Uhr
Weil das grad passt: besteht ein wesentlicher Vorteil darin, Sessions selbst zu verwalten, also in der eigenen Datenbank mit nur einem (verfallenden) Hash-Cookie?
Link zu diesem Beitrag in die Zwischenablage kopieren
Dominic
Moderator

28.07.09
20:46 Uhr
ja, so lässt sich der verfall besser kontrollieren und beobachten.
außerdem ist es einfacher, die session über mehrere server zu nutzen, die ggf. an einer lastverteilung beteiligt sind.

im http://www.tutorials.de/forum/php-tutori...sions.html wird leider eine weniger schöne sache gemacht, nämlich werte direkt aus dem request an die datenbank gegeben:

  1. WHERE "(Nickname like '".$_REQUEST["name"]."') AND
Quelltext in Zwischenablage kopieren
da braucht man dann eigentlich auch kein login-system. gumbo
dazu mal http://de.wikipedia.org/wiki/SQL-Injection und »prepared statements« anschauen.
Link zu diesem Beitrag in die Zwischenablage kopieren
alexxxus
Veteran

28.07.09
20:54 Uhr
ich mache die vorher mit htmlentities in neue variablen. das ist doch dann ok oder?
Link zu diesem Beitrag in die Zwischenablage kopieren
Dominic
Moderator

28.07.09
21:04 Uhr
Editiert: 28.07.09, 21:59 Uhr
da verwechselst du was mit cross-site-scripting (xss) / javascript injection.
was soll die datenbank denn mit htmlentities anfangen? gerade für die an einer sql-injection beteiligten zeichen ' und ; gibt es ja keine html-entsprechung.

e: äh, hihi. es gibt natürlich unicode-darstellung der quotes, aber standardmäßig werden diese nicht umgewandelt.
d.h. z.b. müsstest du bei einer umwandlung auch wissen, mit welchen optionen das vorher passiert ist und wenn du einen string hast, stets merken, in welcher form er jetzt ist. das geht leicht mal durcheinander, wenn man sich nicht ständig neue variablen dazu macht und eben auch dann.
außerdem baust du dir dadurch einen unsinnigen overhead (1. mit den unnötigen variablen) und 2. wenn du z.b. mal nach user „peter müller“ suchen willst, musst du nach htmlentities('peter müller') suchen...

e2: ich hab auch grad bei php.net in den kommentaren gesehen, dass das massenweise dort so oder so ähnlich vorgeschlagen wird. sehr schön auch variationen:
  1. $Output = mysql_escape_string(htmlentities(addslashes($String)));
Quelltext in Zwischenablage kopieren
Link zu diesem Beitrag in die Zwischenablage kopieren
 
#