Frage(n) zu Cookies & Sessions

illuminatus26

Erfahrenes Mitglied
Hallo zusammen.

Ich versuche gerade ein Login-Skript zu schreiben.
Dabei muss ich mich ja zwangsläufig mit Cookies und Sessions auseinandersetzen.
Natürlich geht es auch ohne, aber es soll ja direkt anständig sein.

Jetzt geh ich hin und starte sie Session.
Danach setze ich ein Cookie und lasse mir $_SESSION bzw. $_COOKIE mit var_dump() ausgeben.
Was ich da jedoch finde, verstehe ich nicht ganz.
Das Array $_COOKIE hat nun 2 Werte (den Wert Text und die Session-ID).
Das Array $_SESSION ist jedoch leer.

Kann mir das jemadn erklären

PHP:
session_start();

$cookieinhalt = "das steht im Cookie"; 
setcookie( "test", $cookieinhalt, time()+60 );

var_dump($_COOKIE);
echo "<br>";
var_dump($_SESSION);
echo "<br>";
print_r($_COOKIE['test']);
 
$_SESSION ist leer weil Du noch nicht reingeschrieben hast.
Du musst uebrigens keine Cookies setzen wenn Du mit Sessions arbeiten willst. Session-Cookies werden automatisch gesetzt (falls nicht per php.ini deaktiviert) und "normale" Cookies brauchst Du dann eigentlich nur wenn Du ein automatisches Relogin ermoeglichen willst.

Der von Dir in den Cookie uebergebenen Text ist auch erst nach einem Reload verfuegbar. Dementsprechend siehst Du in Deinem Script nicht den aktuellen Inhalt sondern den von zuvor. Aender mal den Text im Script und reloade. Beim ersten Reload wirst Du noch den alten Text sehen.
 
aha.......

Wie muss ich den nun generell vorgehen?
Ich habe die Werte "Anmeldename" & "Passwort" in der DB.
Lese diese aus und gleiche sie mit den Werten aus dem Login-Formular ab.
Wenn das nun ok ist, dann starte ich die Session ?
Frage ich dann auf den Seiten, die nur mit Login aufgerufen werden dürfen die Session-Id ab
Dafür muss ich sie doch allerdings zwischenspeichern oder?
Oder wie sieht der Aufabu eines Login-Skripts in groben zügen aus
 
Du selbst brauchst Dich nicht im die Session-ID kuemmern, das geht alles automatisch.
Normalerweise wird diese beim User in einem Session-Cookie abgelegt und somit bei jedem Aufruf automatisch an die Seite geschickt. Du musst lediglich mit session_start() die Session starten und schon kannst Du auf die darin gespeicherten Daten (diese liegen auf dem Server) zugreifen.

Ich empfehle Dir mal dieses Tutorial durchzuarbeiten oder zumindest zu lesen.
 
Denke ich habe nun verstanden, wie es geht.
Ist es denn auch die beste Variante mit Sessions zu arbeiten

Für den Autologin mit Cookies, würde mich noch interessieren, wie ich das mit dem Passwort händeln soll. Einfach Anmeldename und Passwort darin speichern?
Reicht es dann, dass Passwort mit md5 zu verschlüsseln
 
Auch zu dem Thema gibt es ein interessantes Tutorial, da wird auf eine Moeglichkeit eingegangen wie man ein Autologin realisiert ohne das Passwort in einem Cookie speichern zu muessen. Schau mal hier.
Im Grunde ist es schon der beste, und auch, zumindest meiner Meinung nach, einfachste Weg mit Sessions zu arbeiten. Vor allem hat man da den Vorteil, dass die Daten nicht zum User uebertragen werden sondern alles was in der Session gespeichert ist bleibt auf dem Server. Der Client kennt lediglich die SessionID.

Und MD5 ist keine Verschluesselung sondern ein Hash. Und, wie ueblich bei diesem Thema, empfehle ich die Nutzung von SHA1 anstelle von MD5, da dabei ein laengerer Hashwert erzeugt wird und somit die Chance einer Kollision geringer ist.
 
Nichts zu danken.
Ich wuensch Dir dabei auf jeden Fall viel Erfolg und viel Spass.

Bei Fragen weisst Du ja wo Du uns findest. ;)
 
Hallo!

Bevor Du aber fleissig in die Tasten haust.....
Wird die Session per URL übergeben, könnte sie "geklaut" werden.
Die Session müsste also transparent übertragen werden..... hier besteht allerdings das Problem dass der User dann Coockies akzeptieren muss.

Ich habe hier mal meine Gedanken dazu niedergelegt wie man dieses Problem umgehen könnte, bzw. die möglichen Risiken weitestgehend gering halten könnte.

Gruss Dr Dau
 
Bin hier fast am verzweifeln.......

Jedesmal, wenn der Login fehlgeschlagen ist und das Formular nochmal angezeigt werden soll, bekomme ich die Meldung :

Notice: Undefined index: test

Ich will sie aber nicht unterdrücken.
Ich stelle es mir so vor, dass bei einem fehlgeschlagenen Login das Formular wieder angezeigt wird und bei einem erfolgreichen Login eine neue Seite included wir, auf der man sich wieder ausloggen kann.

PHP:
<?php
if ($_POST['test'] == 1) {

	include("../funktion_datenbankverbindung.php");
	include("../abfrage_login.php");
	
	datenbankverbindung($sql);
	
	echo "post name: ".$_POST['anmeldename']."<br>";  
	echo "session name: ".$_SESSION['anmeldename']."<br>";  
	echo "post pass: ".$_POST['passwort']."<br>";
	echo "session pass: ".$_SESSION['passwort']."<br>";
	var_dump($_SESSION);
	
	if (($_POST['anmeldename'] == $_SESSION['anmeldename']) & ($_POST['passwort'] == $_SESSION['passwort'])) {
		
		include("../eingeloggt.php");
	}
	
	else {
		
		unset($_POST['test']);
		
	}   
}// Ende if($_POST['test'] == 1)

if (!$_POST['test']) {

?>

<form action="<?php echo $PHP_SELF; ?>" method="post">

	<input name="test" type="hidden" value="1" />
	<input name="anmeldename" type="text" value="<?php /* echo $_POST['anmeldename'] ; */ ?>" />
	<input name="passwort" type="password" value="" />
	<input name="einloggen" type="submit" />

</form>

<?php 

} // Ende if(!$_POST['test'])

echo "test hat folgenden Wert :".$_POST['test']."<br>";


?>
 
Zurück