Session verliert Variablen oder ich habs Prinzip nicht verstanden *lächel*

BitMan

Erfahrenes Mitglied
Guten Morgen Leute.

um Fotos meines Hobbies als Digitaler Bilderknipser nur bestimmten Leute über die Websete verfügbar zu machen, will ich ein Logon Skrip mit User-Datenbank und Gruppen bauen.

Also Session!

Aber da kommt auch schon das erst Problem auf. Die Session funktioniert, ich kann mit richtigem Pass und User anmelden, falsche werden abgewiesen.

SAFE MODE is on und Globals sind off. Ist ein Vserver bei Strato.

Nun verliere ich aber nach dem Anmelden die Session Vars.

Hier findet Ihr die Testseite(nicht über den Aufbau meckern, der ist noch eintönig, nur zum Testen) -> die Test-Seite

Mit benutzer und passwort test könnt ihr die Anmeldung testen.

ich will hier keine riesigen Spurcen Posten, deswegen verzeiht mir bitte den RAR LinK: Sourcen

Ich bin C/C++ Prgrammierer, mach auch C# und VB/VBA. Mit PHP hab ich bisher nur kleine Skripte gemacht, mal ein Verzeichnis lesen, Slide-Show, Mailforms, etc. Nun gehts tiefer.

Hoffe einer von Euch findet ein paar Minuten und kann mir sagen wo mein Denkfehler ist.

Wer mag kann ja mal rein schauen(Meine Bilder) was ich so knipse, aber da sind nur die Bilder wo ich keine Persönlichkeitsrechte verletze, alle anderen wie Akt und Portät muss ich vor ungewünschten Zugriffen schützen. .

Salü
BitMan
 
Also bei mir bleibt die session anscheinend....

Hast du überall session_start() ganz oben?

Hast du Cookies aktiviert?
 
Hab es nur mal kurz überflogen.. is ja auch net gerade klein ^^ , kann es sein das du in manchen seiten das session start vergisst.. bzw ich würde das über eine checkuser.php machen in der dann sowas in der art steht...
PHP:
<?php 
session_start (); 
if (!isset ($_SESSION["user_id"])) 
{ 
  header ("Location: formular.php");
} 
?>
und die bei jeder seite includen wo du "absichern" willst
bsp
PHP:
include ("checkuser.php");
if ($_SESSION["user_bestaetigt"] == "nein") 
{ 
  echo '<div style="color:red;">Du bist kein Uploader!<a href="logout.php" >Weiter!!<br><br></div>';
  die; 
}
so in etwa würds ich machen..

mfg Spikaner
 
Zuletzt bearbeitet:
Hi suf*****, Hi Spikaner,

vielleicht habe ich mein Problem nicht effektiv geschildert.
Die Session Variable bleibt bestehen. Aber nach der Anmeldung ist anstatt der Felder nur noch ein Button, der keine weitere Funktion besitzt. Wenn man darauf klickt soll der natürlich das Form neu aufbauen, was bedeutet das die index.php noch einmal geladen wird und als erstes Session ID, SessionUser und Session Part einliest um diese explizit bei jedem Aufruf der index.php, also bei jedem Klick zu prüfen.

Da ich alles über die Index PHP steuere, alle anderen *.php nur als include/require von if/else geladen wird, ist sicher nur der folgende Teil relevant:

PHP:
$test = true;
	//*** HTTP-Header-Vares einlesen
	if(isset($HTTP_POST_VARS['UserBoxName']))		$UserBoxName = $HTTP_POST_VARS['UserBoxName'];
	if(isset($HTTP_POST_VARS['UserBoxPass']))		$UserBoxPass = $HTTP_POST_VARS['UserBoxPass'];
	
	//*** Session setzen
	if(!isset($SessID))
	{	
		session_start();	
		$SessID = session_id();
		session_register("SessID",session_id());
	}
		
	if(!isset($_SESSION["SessUser"]))		
	{
		$SessUser = "Gast";
		session_register("SessUser",$SessUser);
	}
	else
	{
		$SessUser = $_SESSION["SessUser"];
	}
	if(!isset($_SESSION["SessUserSessPass"]))
	{
		$SessPass = "Passwort";
		session_register("SessPass",$SessPass);
	}
	else
		$SessPass = $_SESSION["SessUserSessPass"];
	
	include("FUNC_DatenBank.php");

Irgendwie verliert mein Script den User und das Passwort, nach erfolgreichen Anmeldung, wenn man den verbleibenden Button klickt, der quasi später mal genutzt wird um Seiteninhalte auf zu rufen, ...

LG BitMan
 
Also hier mal ein beispiel
login.php
PHP:
<?php 
// Session starten
session_start ();
require ("config.php");

// Datenbankverbindung aufbauen 
$connectionid = mysql_connect ($mysql_host, $mysql_user, $mysql_pw); 
if (!mysql_select_db ($mysql_db, $connectionid)) 
{ 
  die ("Keine Verbindung zur Datenbank"); 
} 
// Db abfrage
$sql = "SELECT ". 
    "Id, Nickname, email, Vorname, bestaetigt, admin ". 
  "FROM ". 
    "benutzerdaten ". 
  "WHERE ". 
    "(Nickname like '".$_REQUEST["name"]."') AND ". 
    "(Kennwort = '".md5 ($_REQUEST["pwd"])."')";
$result = mysql_query ($sql); 

if (mysql_num_rows ($result) > 0) 
{ 
// Benutzerdaten in ein Array auslesen. 
  $data = mysql_fetch_array ($result);
// var_dump($result);
// var_dump($data); 

  // Sessionvariablen erstellen und registrieren 
  $_SESSION["user_id"] = $data["Id"]; 
  $_SESSION["user_nickname"] = $data["Nickname"]; 
  $_SESSION["user_email"] = $data["email"]; 
  $_SESSION["user_vorname"] = $data["Vorname"]; 
  $_SESSION["user_bestaetigt"] = $data["bestaetigt"];
  $_SESSION["user_admin"] = $data["admin"];
  header ("Location: upload1.php"); 
} 
else 
{ 
  header ("Location: formular.php?fehler=1"); //anderfalls mit fehlermeldung zurück zum Loginscript.
} 
?
und die dazugehörigrige formular.php
PHP:
<?php session_start (); ?>
<html> 
<head> 
  <title>Login</title> 
</head> 

<body> 
<?php 
if (isset ($_REQUEST["fehler"])) 
{ 
  echo "Die Zugangsdaten waren ungültig, oder du bist noch nicht freigeschaltet worden"; 
} 
?>
<div align="center"></br>Uploader Login</br></br></br>
	</p>
	<table border="1" width="160" bordercolorlight="#808080" bgcolor="#C0C0C0">
		<tr>
			<td><form action="login.php" method="post"> Name: <input type="text" name="name" size="20"></td>
		</tr>
		<tr>
			<td> Kennwort: <input type="password" name="pwd" size="20"></td>
		</tr>
		<tr>
			<td><input type="submit" value="Login"></form></td>
		</tr>
	</table>
</div>
</body> 
</html>
hoffe das filft dir etwas weiter

mfg Spikaner
 
Danke, soweit ist das ein gutes Beispiel. Aber damit weis ich immer noch nicht warum mein Skript die Session-Variablen verliert.
 
Woher kommt die Variable $SessID in deinem Script?
PHP:
    //*** Session setzen
    if(!isset($SessID))
    {    
        session_start();    
        $SessID = session_id();
        session_register("SessID",session_id());
    }

Desweiteren sind [phpf]session_register[/phpf] und die $HTTP_*_VARS veraltet und sollten durch $_SESSION bzw. $_POST, $_GET, $_COOKIE, $_SERVER, $_REQUEST, etc. ersetzt werden.
Und das [phpf]session_start[/phpf] nicht in eine if-Bedingung, sondern einfach in die allererste Zeile deiner index.php, so dass es immer, _immer_ ausgeführt wird!

Nachtrag
PHP:
// Alt, bitte nicht mehr machen
$name = "Foo";
session_register("name");

// Neu, so wirds mittlerweile gemacht
$_SESSION["name"] = "Foo";
 
?ch glaube ich habe was gefunden:
PHP:
 //*** Session setzen
    if(!isset($SessID))
    {    
        session_start();    
        $SessID = session_id();
        session_register("SessID",session_id());
    }

Ersetze das mal durch
PHP:
session_start();    
//*** Session setzen
    if(!isset($SessID))
    {    
        $SessID = session_id();
        $_SESSION['SessID'] = $SessID; //Neu
        // session_register("SessID",session_id()); Schon alt
    }
 
Hey Leute,

danke für die Hilfe. Aber irgendwie will es nicht.

Ich habe nun veraltete Syntax durch neue ersetzt und den gleichen Effekt.

Um alle anderen Fehlerquellen aus zu schließen hab ich das mal auf die Session reduziert:

PHP:
session_start();
	$SessId = session_id();
	
	if(!isset($session["SessUser"]))
		$SessUser = "Gast-Benutzer";
		
	if(!isset($session["SessPass"]))
		$SessPass = "Gast-Passwort";
		
	if(  $SessUser=="Gast-Benutzer"  &&  $SessPass=="Gast-Passwort"  )
	{
		echo "Anmelden<br>";
		$session["SessUser"] = "test";
		$session["SessPass"] = "test";
	}
	else
	{
		$SessUser = $session["SessUser"];
		$SessPass = $session["SessPass"];
		echo "Sess-User prüfen";
	}
	
	echo "Session ".$SessId."<br>";
	echo "User ".$SessUser."<br>";
	echo "Passwort ".$SessPass."<br>";

Nun sollte die Seite beim ersten Auruf den User Gast mit Passwort ausspucken und nach einem Refresh dann den User Test. Aber nach dem Refresh steht immer noch der Gastuser drin. Ich denke ich übersehen nur eine Kleinigkeit, die so simple ist das sie auch Euch nicht auffält Sicher nur ein generelles Verständnis Problem.

LG BitMan
 
Wo ist der Unterstrich?
PHP:
// Nein
$session["SessPass"]

// Ja, Dollarzeichen, Unterstrich und groß bitte
$_SESSION["SessPass"]
 
Zurück