Frage

Ich habe eine von denen „Ich schwöre, dass ich nicht die Server berührt hat“ Situationen. Ich habe ehrlich gesagt keine der PHP-Skripte berühren. Das Problem, das ich habe ist, dass PHP keine Daten auf verschiedenen Seiten oder Seitenaktualisierungen gespeichert werden. Ich weiß, dass eine neue Sitzung korrekt wird erstellt, weil ich es einen Session-Variable (zB $ _SESSION [ ‚foo‘] = „foo“ und drucken zurück auf der gleichen Seite ganz gut einstellen. Aber wenn ich versuche, die gleiche Variable zu verwenden es festgelegt auf einer anderen Seite nicht! gibt es eine pHP-Funktionen oder Informationen, die ich auf meinem Rechner Server verwenden kann, um zu sehen, was los ist?

Hier ist ein Beispiel-Skript, das nicht-Server auf meinem Rechner funktioniert ab jetzt:

<?php
session_start();
if(isset($_SESSION['views']))
    $_SESSION['views'] = $_SESSION['views']+ 1;
else
    $_SESSION['views'] = 1;

echo "views = ". $_SESSION['views'];
echo '<p><a href="page1.php">Refresh</a></p>';
?>

Die ‚Ansichten‘ Variable wird nie nach tun eine Aktualisierung der Seite erhöht. Ich denke dies ein Problem auf ihrer Seite ist, aber ich wollte sicherstellen, dass ich bin nicht ein kompletter Idiot zuerst.

Hier ist die phpinfo () für meine Gastgeber-Server (PHP Version 4.4.7): alt text

War es hilfreich?

Lösung

Vielen Dank für die hilfreichen Informationen. Es stellt sich heraus, dass mein Host-Server geändert und begann eine andere Speicherpfad der Session anders als / var / php_sessions verwendet, das nicht mehr existieren würde. Eine Lösung wäre gewesen ini_set(' session.save_path','SOME WRITABLE PATH'); in all Dateien meines Skripts zu erklären, aber das ist ein Schmerz gewesen wäre. Ich sprach mit dem Host und sie setzten die Sitzung explizit Weg zu einem echten Weg, der nicht existierte. Hoffe, das hilft Sitzung Pfad Probleme jemand hat.

Andere Tipps

Überprüfen Sie, ob Sie nicht https mischen: // mit http: //. Session-Variablen fließen nicht zwischen sicheren und unsicheren Sitzungen.

gleiches Problem hat - was mir passiert ist unser Server-Admin ist die session.cookie_secure boolean auf On geändert, was bedeutet, dass Cookies nur über eine sichere Verbindung gesendet übernehmen. Da das Cookie nicht gefunden wurde, wurde PHP eine neue Sitzung zu schaffen wurden jedes Mal, also Session-Variablen nicht gesehen zu werden.

Mit phpinfo() und überprüfen Sie die session.* Einstellungen.

Vielleicht werden die Informationen in Cookies gespeichert und Ihr Browser keine Cookies akzeptiert, so ähnlich.

Überprüfen

, dass die erste und kommt zurück mit den Ergebnissen.

Sie können auch tun, um eine print_r($_SESSION); einen Dump dieser Variablen zu haben und den Inhalt sehen ....

In Bezug auf Ihren phpinfo() ist die session.save_path ein gültiger? Gibt es in Ihrem Web-Server Schreibzugriff auf dieses Verzeichnis hat?

Hope, das hilft.

Ich hatte folgendes Problem

index.php

<?
    session_start();
    $_SESSION['a'] = 123;
    header('location:index2.php');
?>

index2.php

<?
  session_start();
  echo $_SESSION['a'];
?>

Die Variable $_SESSION['a'] wurde nicht richtig eingestellt. Dann habe ich die index.php acordingly geändert

<?
    session_start();
    $_SESSION['a'] = 123;
    session_write_close();
    header('location:index2.php');
?>

Ich weiß nicht, was diese intern bedeutet, ich erkläre es mir nur, dass die Session-Variable Änderung nicht schnell genug war:)

Überprüfen Sie, ob die Sitzung speichern Pfad vom Webserver beschreibbar ist.

Vergewissern Sie sich, Cookies eingeschaltet .. (ich vergessen, wenn ich sie ausschalten etwas testen)

Verwenden Sie Firefox mit der Firebug-Erweiterung zu sehen, ob das Cookie gesetzt wird und zurück übertragen.

Und auf einer nicht verwandte Notiz, beginnt bei php5 suchen, weil PHP 4.4.9 die letzte der php4 Serie ist.

Überprüfen Sie, wer der Gruppe und der Besitzer des Ordners, in dem das Skript ausgeführt wird. Wenn die Gruppen-ID oder Benutzer-ID falsch ist, beispielsweise auf root, wird es Sitzungen dazu führen, nicht richtig gespeichert werden.

Überprüfen Sie den Wert von „Ansichten“, wenn, bevor Sie es erhöhen. Wenn aus irgendeinem bizarren Grund, es in einen String gesetzt zu werden, dann, wenn Sie 1, um es hinzuzufügen, wird es immer 1 zurück.

if (isset($_SESSION['views'])) {
    if (!is_numeric($_SESSION['views'])) {
        echo "CRAP!";
    }
    ++$_SESSION['views'];
} else {
    $_SESSION['views'] = 1;
}

Nun, wir können Code-Fehler beseitigen, weil ich den Code auf meinem eigenen Server (PHP 5) getestet.

Hier ist, was zu prüfen:

  1. Sie rufen session_unset () oder session_destroy () überall? Diese Funktionen werden die Sitzungsdaten sofort löschen. Wenn ich diese am Ende mein Skript setzen, beginnt es verhält genau wie Sie beschreiben.

  2. wirkt es das gleiche in allen Browsern? Wenn es auf einem Browser und nicht ein anderes funktioniert, können Sie ein Konfigurationsproblem auf dem nicht funktionierenden Browser (das heißt Sie Cookies deaktiviert und vergessen haben, um sie zu aktivieren oder blockieren Cookies durch Fehler).

  3. Ist der Sitzungsordner beschreibbar? Sie können dies nicht testen mit is_writable (), so dass Sie in den Ordner gehen müssen werden (von phpinfo () es sieht aus wie / var / php_sessions) und sicher Sitzungen machen tatsächlich erstellt zu werden.

Wenn Sie eine Sitzung in php5 gesetzt ist, dann versuchen Sie es auf einer php4 Seite zu lesen, ist es vielleicht nicht an der richtigen Stelle suchen! Sprechen Sie die Seiten die gleiche PHP-Version oder stellen Sie den session_path.

verbrachte ich im Alter für die Antwort für ein ähnliches Problem suchen. Es war kein Problem mit dem Code oder der Einrichtung, wie ein sehr ähnlicher Code perfekt in einem anderen .php auf dem gleichen Server gearbeitet. Es stellte sich heraus wurde das Problem durch eine sehr große Menge an Daten verursacht, die in die Sitzung in dieser Seite gespeichert. An einer Stelle hatten wir eine Zeile wie diese: $_SESSION['full_list'] = $full_list wo $full_list eine Reihe von Daten aus der Datenbank geladen wurde; Jede Reihe war eine Anordnung von ungefähr 150 Elementen. Wann wurde der Code zunächst vor ein paar Jahren geschrieben enthielt die DB nur etwa 1000 Zeilen, so enthielt die $full_list über 100 Elemente, die jeweils eine Gruppe von etwa 20 Elementen zu sein. Mit der Zeit, wandten sich die 20 Elemente in 150 und 1000 Zeilen verwandelte sich in 17000, so dass der Code wurde Speichern der Nähe von 64 meg von Daten in der Sitzung. Offenbar mit dieser Menge an Daten gespeichert werden, verweigerte es irgendetwas anderes zu speichern. Sobald wir den Code zu behandeln Daten lokal, ohne sie in die Sitzung zu speichern geändert, alles funktionierte perfekt.

  

Ich weiß, dass eine Lösung gefunden I (OSX mit Apache 1 und schaltete nur auf PHP5), als ich ein ähnliches Problem hatte, dass Lösen 1 bestimmte Schlüssel (dh unset ($ _ SESSION [ 'key']);) verursacht wurde es nicht speichern. Sobald ich nicht ungesetzt tat, dass Schlüssel nicht mehr sie gespeichert haben. Ich habe dies nie wieder gesehen, außer auf diesem Server auf einem anderen Standort, aber dann war es eine andere Variable. Weder waren etwas Besonderes.

Danke für diesen einen Darryl. Das half mir heraus. Ich war das Löschen einer Session-Variablen, und aus irgendeinem Grund hielt die Sitzung von der Begehung. jetzt bin ich gerade Einstellung es stattdessen auf null (was für meine Anwendung in Ordnung ist), und es funktioniert.

Ich weiß, dass eine Lösung gefunden I (OSX mit Apache 1 und schaltete nur auf PHP5), als ich ein ähnliches Problem hatte, dass Lösen 1 bestimmte Schlüssel (dh unset ($ _ SESSION [ 'key']);) verursacht wurde es nicht speichern. Sobald ich nicht ungesetzt tat, dass Schlüssel nicht mehr sie gespeichert haben. Ich habe dies nie wieder gesehen, außer auf diesem Server auf einem anderen Standort, aber dann war es eine andere Variable. Weder waren etwas Besonderes.

Dies ist ein häufiges Problem, habe ich nicht in den anderen Kommentaren angesprochen gesehen: ist Ihr Host einen Cache von einer Art ausgeführt wird? Wenn sie in irgendeiner Art und Weise automatisch Ergebnisse sind Cachen würden Sie diese Art von Verhalten bekommen.

Ich wollte nur eine kleine Notiz hinzuzufügen, dass dies kann auch auftreten, wenn Sie versehentlich die session_start () Erklärung auf Ihren Seiten verpassen.

Ich hatte Session-Cookie-Pfad auf "//" statt "/". Firebug ist genial. Hoffe, es hilft jemand.

hatte ich dieses Problem, wenn sichere Seiten verwenden, wo ich von www.domain.com/auth.php kommen, die domain.com/destpage.php umgeleitet. Ich entfernte die www vom Auth.php Link und es funktionierte. Dies warf mich, weil alles anders bearbeitet; Die Sitzung wurde nicht festgelegt, wenn ich am Ziel angekommen though.

Ein häufiges Problem oft übersehen ist auch, dass es darf kein anderer Code oder zusätzliche Leerzeichen vor dem session_start () Befehl sein.

Ich habe dieses Problem hat vor, wo ich eine leere Zeile hatte vor session_start (), die es verursacht nicht ordnungsgemäß funktioniert.

Hinzufügen meine Lösung:

Überprüfen Sie, ob Sie die richtige Domäne zugreifen . Ich war mit www.mysite.com die Sitzung zu starten, und versuchte, sie von mysite.com zu erhalten (ohne www).

Ich habe dieses Problem gelöst durch eine .htaccess Rewrite aller Domains www Hinzufügen auf der sicheren Seite / Seite zu sein.

Überprüfen Sie auch, wenn Sie verwenden http oder https.

Bearbeiten Sie Ihre php.ini.
Ich denke, dass der Wert von session.gc_probability 1, so setzen Sie sich auf 0.

session.gc_probability=0

Überprüfen Sie, ob Sie session_write_close verwenden (); überall, ich dieses Recht nach einer anderen Sitzung wurde und anschließend wieder in die Sitzung zu schreiben versucht und es hat nicht funktioniert .. so einfach, dass sh * t auf Kommentar

Noch ein paar Dinge, die ich zu tun hatte (ich hatte dasselbe Problem: keine sesson Retention nach PHP Upgrade auf 5.4). Sie viele diese nicht benötigen, je nachdem, was der php.ini Ihres Servers enthält (Check phpinfio ());

session.use_trans_sid=0 ; Do not add session id to URI (osc does this)
session.use_cookies=0;  ; ensure cookies are not used
session.use_only_cookies=0 ; ensure sessions are OK to use IMPORTANT
session.save_path=~/tmp/osc; ; Set to same as admin setting
session.auto_start = off; Tell PHP not to start sessions, osc code will do this

Grundsätzlich sollte die php.ini auf keine Cookies gesetzt werden und Sitzungsparameter müssen konsistent sein mit dem, was osc will.

Sie müssen unter Umständen auch ein paar Session-Code-Schnipsel in application_top.php ändern - Erstellen von Objekten, bei denen keine in der tep_session_is_registered existieren (...) nennt (e. ZB Navigationsobjekt), stellen _SERVER $ HTTP_ Variablen auf den neueren $ Einsen und ein paar andere isset Tests für leere Objekte (google für weitere Informationen). Ich beenden die ursprünglichen sessions.php Dateien in der Lage, bis zu verwenden (includes / Klassen und includes / Funktionen) mit einem leicht modifizierten application_top.php Dinge wieder in Gang zu bringen. Die php.ini Einstellungen waren das Hauptproblem, aber das hängt natürlich davon ab, was Ihr Server Unternehmen als Standardwert installiert haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top