Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Session





Frage

Hallo, habe mal wieder nen kleines Problem ... Habe eine Homepage mit einem Inline-Frame programmiert und habe dazu einen Loginbereich, der nach dem einloggen $_SESSION[´logged´] auf 1 setzt. Wenn ich in der gleichen datei mittels echo $_SESSION[´logged´] anzeigen lasse, bekomme ich auch 1 als Antwort. Nun gehe ich wieder auf meine home.php und will $_SESSION[´logged´] ausgeben, bekomme aber keine antwort ... :( Kann es sein, dass eine Session nicht Frameübergreifend funktioniert? und wenn ja, wie könnte ich es anders lösen (nicht tabellen ;) ) Wäre um Antwort dankbar Goofyhorn

Antwort 1 von rabies

Wie übergibst Du denn die Sessions von Seite zu Seite?! Per Cookie, per URL?!

--rabies.

Antwort 2 von Goofyhorn

per Cookie

if ($pw == $array[´pw´]) $_SESSION[´logged´] = "1";
else $_SESSION[´logged´] = "0";

Antwort 3 von rabies

Ich hab das ganze mal eben durchgespielt... das einzige Mal, als das ganze dann nicht angezeigt wurde war, als ich in der per inline Frame eingebundenen Datei session_start am Anfang nicht gesetzt hab.

--rabies.

Antwort 4 von Goofyhorn

Ich hatte in der index.php die Session vergessen O-)

Jetzt funktioniert alles ... danke dir rabies :)

Antwort 5 von Goofyhorn

Nun ergibt sich leider ein weiteres Problem ... habe in der Index.php eine Funktion, die einen Link zum Einloggen anzeigt, wenn man ausgeloggt ist und einen Link zum Ausloggen, wenn man eingeloggt ist ...

Zitat:
<?php
if ($_SESSION[´logged´] == "1") {
?>

<a href="files/include.php?open=logout" target="main" class="nav">Logout</a>

<?php

} else {

?>
<a href="files/include.php?open=login" target="main" class="nav">Login</a>



Da ich nun aber die Session innerhalb des Frames ändere, wird sie von der Index nur übernommen, wenn man aktualieren drückt (und das können die User ja nicht wissen ;) ).


Gibt es eine Möglichkeit, das alte Fenster zu schließen und es neu aufzubauen oder kennt jemand ne andere Möglichkeit?

Antwort 6 von Supermax

Wenn du Session-Variablen in mehreren Seiten eines Framesets benutzt, solltest du gleich nach session_start() bzw. nach der letzten Zuweisung an eine Session-Variable die Funktion

session_write_close()

aufrufen. Ansonsten müssen beim Laden die anderen Seiten des Framesets darauf warten, bis die erste Seite komplett geladen ist, da die Datei, in der die Session-Informationen gespeichert werden, für weitere Zugriffe gesperrt werden, bis das Script beendet ist.

Antwort 7 von Goofyhorn

müsste ich eigentlich haben ... hier die datei:

Zitat:
<?php
session_start();

include("../inc/mysql.php"); //MySQL-Connection Daten

//MySQL Connection
@mysql_connect($server,$user_name,$user_pw) OR die("Es konnte keine Verbindung zur MySQL-Datenbank hergestellt werden.");
@mysql_select_db("$datenbank") OR die("Die Datenbank konnte nicht ausgewählt werden!");



//Name und Passwort werden aus dem Formluar übergeben
$name = $HTTP_POST_VARS[´name´];
$pw = $HTTP_POST_VARS[´pw´];
$_SESSION[´name´] = $name;


//Formular wird auf evtl. fehlenden Inhalt überprüft
if((empty($name)) || (empty($pw))){
if((empty($name))) echo "<font color\"red\">Fehler! Bitte geben Sie Ihren Benutzernamen an</font><br>";
if((empty($pw))) echo "<font color\"red\">Fehler! Bitte geben Sie Ihr Passwort an</font><br>";
}
else{

//Daten werden aus der Datenbank gelesen
$query = "SELECT pw FROM pws WHERE name=´".$name."´";
$result = mysql_query($query);
$array = mysql_fetch_assoc($result);

//Passwort in der Datenbank wird mit dem eingegebenen verglichen
if ($pw == $array[´pw´]) $_SESSION[´logged´] = "1";
else $_SESSION[´logged´] = "0";
}

session_write_close();

?>


Antwort 8 von Supermax

Direkt vor dem Ende des Scripts brauchst du kein session_write_close(); wenn ein Script beendet wird wird dies automatisch gemacht, ebenso wie alle offenen Dateien, mySQL-Handles etc. automatisch freigegeben werden.

Es ist natürlich guter Programmierstil, Ressourcen so bald wie möglich wieder freizugeben, wenn sie nicht mehr benötigt werden :)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: