Session-Variablen gehen verloren / sind weg

Tritron

Grünschnabel
Also ich mache ein LogIn-Skript für den Admin-Bereich meiner Homepage,
welches mit Sessions geregelt wird und die Myqsl-Datenbank abfragt.

Wenn ich die Session-Variable registriere ist sie auf der selben Seite initialisiert.
Wenn ich dann aber weiterleite, und auf der nächsten Seite die Session starte,
ist die Variable unauffindbar.
Auch mit der SID hab ich es schon probiert, klappt aber auch nit.

Ich hab auf einer anderen Page in meinem Account ebenfalls einen Login,
der ist aber anders aufgebaut, aber. Also kann es an der Session nicht liegen.


Code:
<?php include("../include/login.inc.php"); ?>
<?php include("../include/start.inc.php"); ?>
<!-- Quelltext Anfang -->
<!-- Quelltext Ende -->
<?php include("../include/end.inc.php"); ?>
Datei news.php aus dem Admin-Bereich, welche durch das Include zum Login weiterleitet


Code:
<?php
	session_start();
	include("../extern/pref.php");
		
	if(!isset($access))$access = 1;
	if(session_is_registered("sess_admin") && $_SESSION['sess_admin']) {
		$_userid = $_SESSION['sess_admin'];
		
		$recht = mysql_query("Select rechte From hsg_rechte Where admin = '".$_userid."'");
		$recht = mysql_fetch_row($recht);
		$recht = $recht[0];
		if($recht > $access) header("Location: ../admin/login.php?b=0");
	}
	else header("Location: ../admin/login.php?b=1");
?>
Diese Include-Datei login.inc.php kontrolliert, ob die Rechte für diese Seite reichen, wenn nicht wird auf login.php weitergeleitet.


Code:
<?php
	session_start();
	include("../extern/pref.php");
	
	mysql_query("Create Table If Not Exists hsg_rechte (
			`num` int(2) Not Null Auto_Increment,
			`admin` char(200) Not Null,
			`pw` char(32) Not Null,
			`rechte` char(1) Default 1,
			Primary Key(`num`)
		)");
		
	$err = array(false,false,false);
	if(isset($_POST['login'])) {
		$admin = $_POST['admin'];
		$pw = $_POST['pw'];
		
		$adminQry = mysql_query("Select rechte From hsg_rechte Where admin = '".$admin."'");
		$pwQry = mysql_query("Select rechte From hsg_rechte Where pw = '".$pw."'");
		$allQry = mysql_query("Select admin From hsg_rechte Where admin = '".$admin."' And pw = '".$pw."'");

		if(mysql_num_rows($adminQry)==0) $err[0] = true;
		elseif(mysql_num_rows($pwQry)==0) $err[1] = true;
		if(mysql_num_rows($allQry)==1) {
			$sess_admin = mysql_fetch_row($allQry);
			$sess_admin = $sess_admin[0];
			session_register('sess_admin');
			header("Location: ../admin/news.php");
		}
	}
	include("../include/start.inc.php"); 
?>
<tr><td class="header">Einlogseite</td></tr>
<tr><td class="header2">Diese Seite benötigt <?php if($_GET['b']==0)echo "höhere" ?> eine Zugangsberechtigung</td></tr>
<?php
if($_GET['b']==0) { ?>
	<tr><td>&nbsp;</td></tr>
	<tr><td><a href="javascript:history.back()">zurück</a></td></tr>
<?php }
else { ?>
<form method="post">
<tr><td><table width="250" class="eintrag" cellpadding="0" cellspacing="0">
	<tr align="left">
		<td nowrap><?php if($err[0])echo "Name nicht vorhanden<br>"; ?><strong>Adminname:</strong></td>
		<td><input type="text" name="admin" style="width: 150px" value="<?php echo $_POST['admin'] ?>"></td>
	</tr>

	<tr align="left">
		<td nowrap><?php if($err[1])echo "Passwort falsch<br>"; ?><strong>Passwort:</strong></td>
		<td><input type="password" name="pw" style="width: 150px" value="<?php echo $_POST['pw'] ?>"></td>
	</tr>
	
	<tr>
		<td><input type="submit" name="login" value="einloggen"></td>
	</tr>
	
</table></td></tr>
<tr><td>&nbsp;</td></tr>
</form>
<?php } ?>
<?php include("../include/end.inc.php"); ?>
Dieses Skript ist die Datei login.php, welche zum einloggen dient.


Vor dem Redirect in der Datei login.php ist der Wert der Variablen noch da,
nach dem Redirect in der Datei news.php ist der Wert auch VOR dem Include nicht da, auch wenn ich die Variable neu registriere.


Ich sollte noch sagen, dass das Script aber auf manchen Computern und der Fehler generell nur mit IE (ab 5.5?) auftritt.
Bei Mozilla es auch auf meinem Rechner!
 
Also..

Bitte verwende doch das nächste mal das Syntaxhighliting des Forums
dann ist der Code einfach lesbarer.

Dein Problem ist glaube ich hier:

PHP:
if(mysql_num_rows($allQry)==1) {
    $sess_admin = mysql_fetch_row($allQry);
    $sess_admin = $sess_admin[0];
    session_register('sess_admin');
    header("Location: ../admin/news.php");
}

Versuch mal session_register nicht zu benutzen sondern das alles über $_SESSION zu machen.
PHP:
if(mysql_num_rows($allQry) > 0) {
    $sess_admin = mysql_fetch_row($allQry);
    $sess_admin = $sess_admin[0];
    $_SESSION['sess_admin'] = $sess_admin;
    header("Location: ../admin/news.php");
}

hth
 
Zurück