2011-01-06 25 views
6

Ich arbeite mit wamp2.0 - PHP 5.3, Apache 2.2.11 aber meine Sitzungen speichern keine Daten.PHP Sitzung funktioniert nicht

Ich habe eine Seite, die einen Parameter akzeptiert, die (vereinfachte Version) Ich möchte Speicher in einer Sitzung, so dass, wenn ich komme zu

http://www.example.com/home.php?sessid=db_session_id 

Das Skript wie folgt aussieht:

session_start(); 

$sessid = @$_GET['sessid']; 
if ($sessid) { 
    $_SESSION['sessid'] = $sessid; 
} 
var_dump($_SESSION); 

und Ausgänge:

array(1) { [0]=> string(13) "db_session_id" } 

was in Ordnung ist, aber dann, wenn ich zu link (ohne t gehen Der Sessid-Parameter) Das $_SESSION Array ist leer. Ich habe Ereignis versucht, die $_SESSION['sessid'] = $sessid; Linie zu kommentieren, bevor ich auf die Seite ohne den Parameter ging, aber dennoch funktionierte es nicht.

Ich habe die session_id() Ausgabe überprüft und die Session-ID bleibt gleich.

Sitzungseinstellungen von phpinfo()

Session Support enabled 
Registered save handlers files user 
Registered serializer handlers php php_binary wddx 

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_httponly Off Off 
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 1000 1000 
session.gc_maxlifetime 1440 1440 
session.gc_probability 1 1 
session.hash_bits_per_character 5 5 
session.hash_function 0 0 
session.name PHPSESSID PHPSESSID 
session.referer_check no value no value 
session.save_handler files files 
session.save_path c:/wamp/tmp c:/wamp/tmp 
session.serialize_handler php php 
session.use_cookies On On 
session.use_only_cookies On On 
session.use_trans_sid 0 0 

EDIT:

Die Sitzungen werden von einem Iframe gelöscht. Ich weiß nicht warum, aber wenn kommentiert, funktionieren die Sitzungen gut. Die Sache ist, der iframe muss dort bleiben (was natürlich schlecht ist, aber ich kann nichts dagegen tun). Nun ... wissen Sie über irgendwelche Workarounds, um die Sitzungen mit einem iframe arbeiten zu bekommen?

+1

Ist der 'COOKIE' im Browser eingestellt? –

+0

Wenn Sie die '$ _COOKIE'-Variable meinen, dann ist es gesetzt – Elwhis

+0

Warten Sie, bin ich der einzige, der hier bemerkt, dass dieses Skript völlig falsch für den Autor Zweck ist und es funktioniert, wie es eigentlich sollte? Wenn Sie $ _GET ['sessid'] nicht setzen, wird weder $ sessid gesetzt noch die if-Anweisung ausgeführt. – Shoe

Antwort

1

Ein Rahmen kann nur dann auf die Sitzung zugreifen, wenn sie sich auf dieselbe Domäne bezieht. Zum Beispiel:

<? 
$_SESSION["foo"]="foo"; 
?><html> 
<body> 
    <iframe src ="test.php" width="200" height="200"></iframe> 
</body> 
</html> 
<? 
print_r($_SESSION); 
?> 

Sollte außerhalb und innerhalb des Iframe arbeiten. Wenn Ihr noch Probleme versuchen:

<?php session_start(); 

    $sessid = $_GET['sessid']; 
    if (isset($sessid) && $sessid != "" && $sessid != NULL) { 
     $_SESSION['sessid'] = $sessid; 
    } 
    print_r($_SESSION);?> 
0

Ich kann nur erraten, was dort passiert, dass Ihre Sitzung nicht gespeichert wurde. Ist Ihr session.save_path -> c:/wamp/tmp ein schreibbarer Ordner (schreibgeschützt in den Eigenschaften)? Wird Apache als Administrator oder auf einer bestimmten Ebene ausgeführt, die über ausreichende Berechtigungen zum Schreiben in diesen Ordner in Diensten in den Administrator-Tools in der Systemsteuerung verfügt?

Überprüfen Sie dies tatsächlich: PHP session vars not being maintained. Führen Sie im Wesentlichen session_id() auf dieser Seite zweimal aus und vergleichen Sie die Sitzungs-IDs. Wenn sie unterschiedlich sind, akzeptiert Ihr Browser keine Session-Cookies.

EDIT: Habe nicht realisiert, dass du das schon getan hast.^

Dies könnte helfen. Link < --- Sehen Sie sich den zweiten Vorschlag/die Antwort mit dem Debugging-Code für die Sitzung an.

+0

Alles ist in Ordnung. Die Sitzungsdateien werden ordnungsgemäß erstellt. Die letzte Datei enthält 'sessid | s: 0:" ";', so wird geschrieben, aber ohne die Daten. Es ist seltsam – Elwhis

+0

Könnten Sie var_dump ($ _ SESSION. "". $ _ COOKIE) ausführen; gleich nach dem session_start? – Norm

+0

Bearbeiten Sie meine Antwort, fügte ich einen weiteren Link zum Betrachten hinzu. – Norm

0

http://php.net/manual/en/function.session-start.php

Sie haben etwas in der $ _SESSION globalen Array setzen für sie alles zu registrieren, sonst, es leer ist ...

Da Sie die Existenz von sessid testen es auf $ hinzufügen _SESSION, $ _SESSION bleibt leer.

Probieren Sie etwas wie:

session_start(); 
$_SESSION['sessid'] = 123456789; 
var_dump($_SESSION); 
+0

wenn ich var_dump auf '$ _SESSION' nach dem' if ($ sessid) ... 'die Variablen sind dort gespeichert, aber nicht gehalten werden, wenn ich die andere Seite ohne Parameter gehe – Elwhis

+0

Dieser missversteht Ihre Frage, wie ich es tat . Er stellte zuerst den Sessid-Parameter ein und die Sitzung sollte die Variable registrieren, DANN geht es auf die gleiche Seite, ohne Sessid zu setzen, und die Variable sollte da sein. – Shoe

0

Ich weiß nicht, ob es die Ursache des Problems ist (die Fehlerunterdrückungs @ scheint ein wenig out-of-Platz hier ...), aber ich würde ein wenig vereinfachen.

Also statt:

$sessid = @$_GET['sessid']; 
if ($sessid) { 
    $_SESSION['sessid'] = $sessid; 
} 

würde ich verwenden:

if (isset($_GET['sessid'])) 
{ 
    $_SESSION['sessid'] = $_GET['sessid']; 
} 

By the way, würde ich auch auf $_GET['sessid'] einige Eingangsprüfung tun sicher, dass es nur erlaubt, enthält die Zeichen zu machen.

1

Wenn Sie ein ähnliches Problem bekommen, finde ich das ein ziemlich lohnender Test. Führen Sie ein paar Anfragen im Browser aus und sehen Sie, was Sie bekommen.

An den Autor: Ihr letzter Kommentar erwähnt, dass Ihr Skript funktioniert - gut für Sie. Wenn es kaputt ist, dann probiere den Code oben aus und lass mich wissen, was du bekommst.

1

Es ist eine alte Frage, aber ich kam hier mit dem gleichen Problem. Da die Frage nicht beantwortet wurde, kommt hier was ich gefunden habe.

Ich hatte ein ähnliches Problem und in meinem Fall war das Problem, ich rief session_start() nicht auf allen Seiten, auf denen die Sitzung verwendet wurde. Ich dachte, ich sollte es nur auf der "Login" -Seite nennen, aber das ist nicht wahr.

Beachten Sie außerdem, dass session_start() vor dem <html> Tag aufgerufen werden muss.

2

Sie müssen auf jeder Seite den Befehl session_start(); aufrufen. Es hat für mich funktioniert. Sie müssen dies auch aufrufen, bevor eine Ausgabe (HTML, Ausgabe, auch Leerzeichen) an den Benutzer gesendet wird.

1

Heute verbrachte ich etwa vier Stunden mit $ _SESSION nicht auf dem Server gespeichert werden. Es stellte sich heraus, dass es sich um ein Serverproblem handelte. Das System (Windows 2003, IIS 6) verwendete den temporären Windows-Standardordner C: \ Windows \ Temp \, um die Sitzung zu speichern. Es hat es erschaffen, aber es war leer.

Aus irgendeinem Grund hörte es einfach auf zu arbeiten (es gab kein Problem vorher). Meine beste Schätzung, dass es ein Limit erreicht hat oder der Ordner einfach zu viele Dateien enthielt. Ich habe es aussortiert, indem ich session.save_path in einen anderen Ordner gesetzt habe.

Verwandte Themen