Session vs. Cookie

saila

Erfahrenes Mitglied
Hi,

hatte das Thema schon mal angerissen, aber nun mache ich es an einem Codeteil fest. Evtl. ist dann die Wahrscheinlichkeit auf Lösungsansätze höher.

Hier das Loginscript:

PHP:
<?php
if(isset($_POST['login1'])) {

	//Prüfen ob eMailadresse angegeben..
    if ($_POST['email'] == '') {
         $info_email1 = "<- Bitte tragen Sie Ihre eMail&ndash;Adresse ein";
    }
    //eMail auf Korrektheit prüfen.
    elseif(!preg_match("/^[^\s@<>]+@[^\s@<>]+\.[a-z]{2,4}$/", $_POST['email'])) {
        $info_email1 = "Ihre eMail&ndash;Adresse ist nicht korrekt.";
    }
    //Passwortcheck ob angegeben.
    elseif($_POST['pass'] == '') {
        $info_pass1 = "Bitte geben Sie ihr Password an.";
    }
    //Wenn alles korrekt, dann DB und Daten auf Übereinstimmung prüfen.
    else {
        // DB-Abfrage bzgl. Userdaten
        $con = mysql_query("SELECT *
                            FROM user
                            WHERE email    ='".$_POST['email']."' AND
                                  password ='".md5($_POST['pass'])."'");
        // Ist Datensatz vorhanden dann..
        $a = mysql_num_rows($con);
        // Daten in Array packen.
        $e = mysql_fetch_object($con);

        // Ist Datensatz vorhanden, dann mach...
        if($a == 1) {

	    	// Update bzgl. IP in Userdaten.
    	    $con = mysql_query("UPDATE user
        	                    SET ip='$add'
            	                WHERE id = '".$e->id."' AND
                	                  email='".$_POST['email']."'");

	        // Registrier die Daten in der Session.
    	    $_SESSION['username'] = $e->name;
        	$_SESSION['uid'] = $e->id;
	        $_SESSION['add'] = $REMOTE_ADDR;

	    	// Leite zur Indexseite weiter.
    	    header("Location: index.php?sid=$sid");
	    }
    	else {
               header("Location: anmelden.php");
        }
    }
}
?>

Das als ein Teil des Loginbereichs. Klar ist, in einer include-Datei ist session_start() und session_id() geregelt.

Doch nun das Problem. Wenn der User keine Cookies annimmt, wird die Session nicht auf dem Server angelegt. Auch der Abruf der Sessionvariablen bingt nichts bzw. es liegen keine Daten vor. Ergo - die Daten werden wie gesagt nicht angelegt.

Werden Cookies angenommen, ist der Loginvorgang vollständig sauber abgeschlossen und die Sitzung läuft.

Nun zu meinem Problem. Warum wird die Session nicht auf dem Server angelegt in einer Sessiondatei mit Sessionname $sid?

Damit die Sessioneinstellungen auch noch dabei sind folgen diese in der Übersicht:

Session Support enabled
Registered save handlers files user

Directive Local Value Master Value
session.auto_start Off Off
session.bug_compat_42 On On
session.bug_compat_warn On On
session.cache_expire 180 180
session.cache_limiter nocache nocache
session.cookie_domain no value no value
session.cookie_lifetime 0 0
session.cookie_path / /
session.cookie_secure Off Off
session.entropy_file no value no value
session.entropy_length 0 0
session.gc_divisor 100 100
session.gc_maxlifetime 1440 1440
session.gc_probability 1 1
session.name PHPSESSID PHPSESSID
session.referer_check no value no value
session.save_handler files files
session.save_path /tmp /tmp
session.serialize_handler php php
session.use_cookies On On
session.use_only_cookies Off Off
session.use_trans_sid Off Off

Wäre über Lösungsansätze dankbar. Ich sitze seit mind. 4 Tagen über dem Teil und frage mich nach wie vor, warum auf dem Server die Daten nicht angelegt werden.

Danke im Voraus!
 
Zuletzt bearbeitet:
Hallo!

Damit die Sessions auch ohne Cookies funktionieren, solltest du die im Anhang (von der Funktion PHP_Info () ausgegebenen) dargestellten Werte so setzten, wie auf dem Bild dargestellt.
Das geht mit der Funktion ini_set ().
 

Anhänge

  • session.png
    session.png
    820 Bytes · Aufrufe: 154
Zuletzt bearbeitet:
Danke dir. Es geht aber darum:
User lehnt Cookies ab und somit entsteht der Fallback. Ergo - SID an URL und Session wird auf dem Server per Datei hinterlegt, worauf im normalfall zugegriffen wird. Aber genau das geschieht nicht.

Ich brauche also nicht die Einstellung für Cookies, sondern will wissen, warum die Session auf dem Server nicht angelegt wird.

Zudem entsprechen die Einstellungen der php_ini() derer, das Cookies auch gesetzt werden. Das ist auch nicht das Problem. Wie gesagt - es muss ohne Cookie auch gehen und das ist warum auch immer nicht der Fall.
 
Zuletzt bearbeitet:
Warum die Session Variablen auf dem Server trotz erzeugter session_id bei Ablehnung von Cookies nicht zu registrieren sind.
 
Solange sich der Benutzer nicht mit einer Session-ID identifizieren kann, kann auch nicht auf die vorher deklarierten Variablen zugegriffen werden.
 
Würde mich auch interessieren wie das Problem gelöst wurde...

Gruß, Tamer
 
Zurück