Hallo !
ich habe ein paar Probleme mit sessions, weil die Werte irgendwie nicht stimmen :-( Also ich würde es jetzt gerne ein bisschen näher erklären, hoffentlich wird es mir auch gelingen.
Also: ich habe eine Titelseite so zu sagen, also die "hauptseite" index.php. Da habe ich ein php-Script eingebaut, sodass andere php-Dateien per include beim Anklicken eines javascript-Menü geladen werden können, da ich die Seite ohne Frames machen will. Das funktioniert auch wunderbar. Das Problem ist, dass sich der User zuerst authentifizieren muss, also einloggen muss. Gleichzeitig soll er sich mit der mysql-DB verbinden, falls die Kennung und Password stimmen. Da sind nur die relevanten Scripte, da das Prog schon ziemlich gewachsen ist.
---------------------------------------------------------------
INDEX.PHP
<?php
include_once "mysql.inc";
//Session starten
@session_start();
function valid($stunden) {
$sekunden = time() + 3600 * $stunden;
return $sekunden;
}
/*beim 2. Laden der Seite soll das Cookie gesetzt werden, zuerst
muss ja das mit dem Login erledigt werden*/
if($_SESSION["verbindung"]) { //liefer 0 !
if(!isset($_COOKIE[cookie_name])) {
setcookie(cookie_name, $_POST['kennung'], valid(2));
}
}
//TEST: ich habe mir alle Session-Variablen ausgeben lassen !
//und die verbindung ist 0 (stimmt nicht)
/*und die meldung ist immer der 1. Wert, obwohl sich eigentlich beim
wiederholenden Anmelden ändern sollte. Wieso ?*/
while (list($k, $v) = each($_SESSION)) {
//da muss ich den Wert abfragen, ob es ein Array ist !
if(is_array($v)) {
while(list($schlüssel, $wert) = each($v)) {
echo $schlüssel . " = " . $wert;
echo "<br>";
}
} else {
echo $k . " = " . $v;
echo "<br>";
}
}
?>
<html>
<head>
usw........................
---------------------------------------------------------------
MYSQL.INC
<?php
/*Klasse Connection soll sich mit dem mysql-Server verbinden und die Variable
verbindung setzen*/
class Connection {
var $conn;
function Connection($h, $k, $p) {
if (trim($k) == "" || trim($p) == "") {
$this->conn = 0;
} else {
if ($c = mysql_connect($h, $k, $p)) {
$this->conn = $c;
} else {
$this->conn = 0;
}
}
}
function get_conn() {
return $this->conn;
}
}
?>
-----------------------------------------------------------------
LOGIN.PHP
//eigentlich nicht interessant, nur wegen der Oberfläche
<script language= "JavaScript" type="text/javascript">
function status_zeigen(status) {
var position = null;
//testen, ob es gibt
if (document.getElementsByName("status_fenster") == null) return;
position = document.getElementsByName("status_fenster")[0].length;
var status_Zeile = document.createElement("option");
status_Zeile.text = status;
document.getElementsByName("status_fenster")[0].add(status_Zeile, position+1);
}
</script>
<?php
include_once "mysql.inc";
$status = "";
//Instanz der Klasse Connection
//Cookies werden am Anfang der Datei index.php gesetzt
$c = new Connection('localhost', $_POST['kennung'], $_POST['password']);
if($c->get_conn() == 0) {
$status = "Verbindung konnte nicht hergestellt werden.";
} else {
$status = "Verbindung wurde erfolgreicht hergestellt.";
/*wenn erfolgreich, soll eine session-Variable angelegt werden,die das Connection-handle beinhält*/
//session_register() ruft implizit session_start() auf
if(!session_is_registered("verbindung")) session_register("verbindung");
$verbindung = $c->get_conn();
}
//jetzt eine session-Variable anlegen, die die Meldungen beinhält
if (!session_is_registered("meldung")) session_register("meldung");
//falls sich schon etwas in der "meldung" befindet, soll status angehängt werden
$meldung = array_merge($meldung, array($status));
//alle Meldungen in ein Select einlesen:
while (list($k, $v) = each($meldung)) {
echo "<script language="JavaScript">\n";
echo "status_zeigen('$v');\n";
echo "</script>";
}
?>
------------------------------------------------------------------
Beim Einloggen werden folgende Werte zurückgeliefert:
- wenn login ok:
verbindung = resource id ... (also Connectionhandle)
meldung = "Verbindung wurde erfolgreicht hergestellt." - wenn nicht ok:
verbindung = 0;
meldung = "Verbindung konnte nicht hergestellt werden."
Beim neuen Laden der Seite (index.php) haben die Session-Variablen aber folgende Werte:
verbindung = immer 0 !
meldung = das, was zum 1. Mal gesetzt wurde, die Session-Variable läßt sich durch ein zweites Anmelden (z.B. User hat sich zum 1. Mal vertippt und will sich zum 2. Mal korrekt anmelden) nicht ändern
Kann mir jemand helfen ?
danke
kati