[Sessions mit Cookies] Cookie gesetzt, Session geht aber verloren

sam

Erfahrenes Mitglied
Hi Mit-Tutorianer,

habe da ein kleines aber dringendes Problem: Bei einem Projekt von mir soll das Login-System ab jetzt nur noch mit Cookies anstatt von der Session in der URL funktionieren. (eBay lässt grüßen)
Dafür habe ich in der php.ini folgende Werte gesetzt:

PHP:
session.use_cookies = 1
  session.use_only_cookies = 1
  session.use_trans_sid = 0
         
         session.auto_start = 0
         session.cookie_path = /
         session.cookie_domain =
Am Script selbst habe ich nichts geändert....

Problembeschreibung:

  • Ich fülle das Formular (auf intern.php) aus und schicke es ab.
  • Die Daten gehen an die Datei login.php per POST.
  • Dort werden sie überprüft und bei Erfolg wird der Besucher auf die Seite intern.php weitergeleitet
  • Nun ist $_SESSION["eingeloggt"] auf "1" gesetzt...der Besucher ist im internen Bereich
  • Im Firefox und im IE wird auch das Cookie mit der Session-ID gesetzt
  • Nun klicke ich auf eine andere Seite und *schwups* habe ich die Session verloren :(
Die besagte andere Seite hat session_start() und alle anderen nötigen Sachen drin...sie hat ja früher mit der Session in der URL einwandfrei funktioniert.

Meine Vermutung: Der Server hat keine Berechtigung sich das Cookie wieder zu holen...session.cookie_domain habe ich nicht gesetzt, da auf dem Server sehr viele Domains sind und wenn ich es leer lasse automatisch der Host im Cookie steht.

Ist da ein grober Fehler erkennbar?
Bin ich auf dem richtigen Weg? :-)

mfg
sam
 
So, um diesen Monolog mal ein wenig weiterzuführen: Session wird erstellt, ich kann diese auch mit Daten füllen, aber beim nächsten Seitenaufruf bekommt der User wieder eine neue Session-ID und verliert dadurch natürlich alle Daten, obwohl er bereits ein Cookie mit einer gültigen Session-ID besitzt.

Kann ich das irgendwie umgehen?
Soll ich die internen Funktion von PHP deaktivieren und die Cookies selbst setzen?
Wie kann ich dem Server sagen, welchem User welche Session-ID gehört, wenn ich diese aus dem Cookie lese?

Hilfe! :(

mfg
sam
 
du musst so machen:
PHP:
session_start();
if (!isset($_SESSION['...']))
{
  $_SESSION['...'] = ...;
}
else
{
  //normale seite
}
 
Mach mal ein print_r($_COOKIE) und ein print_r($_SESSION) in deine Scripts, um den Fehler weiter einzugränzen. Dann siehst du, ob der Session-Cookie auf wirklich übergeben wird, und falls ja, was in deinem Session-Array steht.
 
Das habe ich beides schon probiert mit folgendem Ergebnis:
Auf der ersten Seite, die nach der login.php folgt, ist alles ok.
Cookie ist gesetzt und die Session ist mit meinen Daten gefüllt.

Nun klicke ich auf einen Link (in dem ich natürlich mittlerweile keine Session-ID mehr übergebe) und schon wird für den User eine neue Session gestartet und ein neues Cookie gesetzt...leider für eine völlig leere Session.

Meine Vermutung ist weiterhin, dass der Server das Cookie nicht lesen kann und deshalb die Verbindung Besucher <-> Session verliert...warum, ist mir allerdings ein großes Rätsel :(

mfg
sam
 
Oliver Gringel hat gesagt.:
Das Problem wird eher sein, dass der Browser das Cookie nicht mitschickt. Das solltest du dann überprüfen.
Habe schon div. Browser probiert (IE,FF,Opera)...jedes Mal mit dem gleichen Ergebnis.
Wie kann ich denn prüfen, ob mein Browser das Cookie mitschickt?

mfg
sam
 
sam hat gesagt.:
Wie kann ich denn prüfen, ob mein Browser das Cookie mitschickt?
Natürlich per $_COOKIE :-(
War wohl ein wenig zu früh für mich :)

Habe eine Testseite gebastelt um zu sehen was da überhaupt abgeht.
Nachdem mich die login.php per Meta-Refresh nach erfolgreichem Login auf Seite 1 weiterleitet sehe ich folgendes:
Code:
  Session-Name: s
  Session-ID: 448bd871ef03f2f57b490457bda73613
 
  _SESSION:
 
  Array
  (
      [eingeloggt] => 1
      [id] => 5
  )
 
  _COOKIE:
 
  Array
  (
      [s] => 448bd871ef03f2f57b490457bda73613
  )
Wie man sieht: Alles ist okay. Cookie wurde gesetzt, wieder übertragen und enthält auch die richtige Session-ID.

Nun klicke ich auf einen Link, der mich auf Seite 2 führt.
Dort wartet folgende Seite auf mich:
Code:
  Session-Name: s
  Session-ID: 61f3c72b4af23d24f9552fd9af609909
 
  _SESSION:
 
  Array
  (
  )
 
  _COOKIE:
 
  Array
  (
      [s] => 448bd871ef03f2f57b490457bda73613
  )
Wie man sieht....sieht man nichts :(
Cookie hat noch die alte Session, wurde auch übertragen, aber der dumme Server startet eine neue Session...wieso?

Ich glaube mittlerweile, dass das an der Konfiguration der PHP.INI liegt, da mein osCommerce gleiche Symptome aufweist...da ist der Warenkorb auch immer wieder leer, wenn ich weiter einkaufen will.
Leider findet man zur Konfiguration der PHP.INI für Sessions mit Cookies im Netz relativ wenig.

mfg
sam
 
Zuletzt bearbeitet:
Nur so eine Idee, ich hatte mal ein ähnliches Problem:

Hast Du ein SSI-include von php-Seiten?

Edit: ähm, sorry, bl.. ausgedrückt, nochmal neu

Hast Du eine index.html, die nur daraus besteht, dass die index.php included wird (über .htaccess-"SSI auch in html-Seiten ausführen"-Änderung)?
Wird hierbei die index.html verlinkt, geht meist die session verloren und wird auf jeder Seite neu gesetzt.
Setzt Du hingegen mod_rewrite ein, müsste es dann einwandfrei funktionieren.

Wenn meine Idee völlig daneben liegt, gebt bitte Bescheid.


Schöne Grüsse,
Achim
 
Zuletzt bearbeitet:
Zurück