rob: $_Session IE 7

Beitrag lesen

Hi!

(PHP) $_Session IE 7
ich habe jetzt schon alles ausprobiert, aber ich habe mein Login-Script im Internet Explorer 7 nicht zum laufen bekommen. Im FF und im IE6 und so geht es. Der Safari beim MAC weigert es sich beim ersten Versuch, dann macht er aber mit.

Dann kann es sich aber nicht um ein PHP-Problem handeln.
PHP läuft serverseitig. Wenn es Unterschiede in verschiedenen Browsern gibt, muß das ein clientseitiges Problem sein.

Was heißt denn eigentlich "nicht zum Laufen bekommen"?
Gibt es eine Fehlermeldung? Wenn ja, welche?
Hast du die Rückgabewerte deiner Funktionen geprüft?

Wird die Session auf dem Server gestartet? Kann ein Cookie gesetzt werden?
Wird dieses in den HTTP-Header übermittelt?
Ist die Annahme von Cookies in den Browsern zugelassen?

Wo genau liegt das Problem? An welcher Stelle hängt das Script? Bis wohin wird alles noch fehlerfrei ausgeführt?

$_GET[expired]=strip_tags($_GET[expired]);

Das ist falsch.
Statt $_GET[expired] muß es $_GET['expired'] heißen.
(Und bei den folgenden Variablen ebenso.)
Andernfalls versuchst du, eine nicht definierte Konstante zu nutzen.
Da es diese halt nicht gibt, vermutet PHP dann mal einfach, daß du ein Array-Element meinst.
Je nachdem, wie das error_reporting auf dem Server eingestellt ist, wird eine unschöne Meldung ausgegeben, was eventuell sogar dazu führen könnte, daß dein Script nicht mehr korrekt weiterarbeitet (z.B. wenn noch Header gesendet werden sollen.).

$_POST[login_email]=strip_tags(strtolower($_POST[login_email]));

Das strtolower() gefällt mir nicht und könnte eventuell zu Problemen führen.
Emailadressen sind potentiell casesensitive!
Daher würde ich es hier lassen, alles in Kleinbuchstaben umzuwandeln.

$_POST[password]=strip_tags($_POST[password]);

Warum entfernst du HTML-Tags aus einem Paßwort?
Das soll doch sicherlich nicht angezeigt werden, oder?
Und falls doch, dann solltest du an dieser Stelle nichts ändern, sondern bei der Ausgabe einfach ein htmlentities() drauf anwenden.
Was wäre denn, wenn ein User sich "<html>" o.ä. als Paßwort ausgesucht hat?
Sonderzeichen ist Paßwörtern sind ja keine schlechte Sache...
Du solltest beim Paßwort jedenfalls nichts filtern.

#Start HTML
echo "<html>

Hier solltest du erst einmal eine DTD-Angabe ausgeben.
Außerdem frage ich mich, wieso du diesen langen Codeblock mit einem einzigen "echo" ausgibst?
Hierfür würde sich ein Heredoc-Bereich viel besser anbieten.

<script language='JavaScript' type='text/javascript'>

Das language-Attribut ist deprecated.

</head>

Keine Angabe zum verwendeten Charset per Metatag?
Sendet der Server diese Angabe als Header?

<body bgcolor=#FFFFDF onload='check_js();'>

Du hast ja keine DTD-Angabe gemacht, insofern weiß ich nicht, womit du wirklich arbeitest, aber trotzdem rate ich dazu HTML-Attribute in Anführungszeichen zu setzen.

<form action='$PHP_SELF' method='POST' name='login'>

$PHP_SELF gibt es nur, wenn register_globals in der php.ini auf "on" gestellt ist.
Nutze in jedem Fall $_SERVER['PHP_SELF'].

<table border=0>
<tr><th colspan=2>Login</th></tr>

Hui... Tabellen zu Designzwecken mißbrauchen...
Warum setzt du kein CSS ein?
Tabellen sollten nur für tabellarische Inhalte zum Einsatz kommen.

<noscript>
Please turn on JavaScript<br>
</noscript>";

Hahaha!
Und was machen die User, die gar kein JS nutzen können?
Wenn JS nicht zur Verfügung steht, dann ist es nicht immer der Fall, daß ein User dies deaktiviert hat.
Vielleicht wird ein Client eingesetzt, der gar kein JS kann?
Vielleicht liegt es auch an anderen Gründen, daß kein JS eingesetzt werden kann.
Und wenn ein User JS deaktiviert hat, dann hat er dies aus einem bestimmten Grund getan.
Dann wird er das sicher nicht bei so einer Meldung einschalten, sondern eher deine Seite verlassen.
JS ist ja schön und gut, aber es sollte nur als Mehrwert dienen.
Eine Site sollte auch immer ohne JS nutzbar sein.

echo "</center>";

Center-Tags...
Auch dafür gibt es CSS.

<span style='color:black; font-size: 9; left:20px;'>

Font-Size 9? 9 was? Tomaten? Birnen?

Und ansonsten sieht dein Script für mich recht wirr aus.
Ich habe mir jetzt nicht die Mühe gemacht, zu schauen, wo da der Fehler liegen könnte.
Du solltest das selber testen und den Fehler erst einmal etwas weiter einkreisen.

Schöner Gruß,
rob