end PHP-Sitzungsdaten werden nicht gespeichert



php session login (18)

Ich habe eine dieser "Ich schwöre, ich habe den Server nicht berührt" Situationen. Ich habe ehrlich gesagt keine der PHP-Skripte berührt. Das Problem, das ich habe, ist, dass PHP-Daten nicht über verschiedene Seiten oder Seitenaktualisierungen gespeichert werden. Ich weiß, dass eine neue Sitzung korrekt erstellt wird, weil ich eine Sitzungsvariable (zB $ _SESSION ['foo'] = "foo" einstellen und auf der gleichen Seite wieder ausgeben kann. Aber wenn ich versuche, dieselbe Variable zu verwenden auf einer anderen Seite ist es nicht gesetzt! Gibt es PHP-Funktionen oder Informationen, die ich auf meinem Host-Server verwenden kann, um zu sehen, was passiert?

Hier ist ein Beispielskript, das momentan nicht auf dem Server meines Hosts funktioniert:

<?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 Variable 'views' wird nach einer Seitenaktualisierung nie inkrementiert. Ich denke, das ist ein Problem auf ihrer Seite, aber ich wollte zuerst sicherstellen, dass ich kein kompletter Idiot bin.

Hier ist der phpinfo () für den Server meines Hosts (PHP Version 4.4.7):


Answer #1

Danke für die hilfreichen Informationen. Es stellt sich heraus, dass mein Host Server gewechselt hat und einen anderen Session-Speicherpfad als / var / php_sessions verwendet hat, der nicht mehr existiert. Eine Lösung wäre gewesen, ini_set(' session.save_path','SOME WRITABLE PATH'); zu deklarieren ini_set(' session.save_path','SOME WRITABLE PATH'); in all meinen Skriptdateien wäre das aber ein Schmerz gewesen. Ich habe mit dem Host gesprochen und sie haben den Sitzungspfad explizit auf einen echten Pfad gesetzt, der existierte. Hoffe, das hilft jedem, der Probleme mit dem Sitzungspfad hat.


Answer #2

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

Hier ist zu überprüfen:

  1. Rufen Sie session_unset () oder session_destroy () überall auf? Diese Funktionen löschen die Sitzungsdaten sofort. Wenn ich diese am Ende meines Skripts einsetze, verhält es sich genau so, wie du es beschrieben hast.

  2. Funktioniert es in allen Browsern? Wenn es in einem Browser und nicht in einem anderen Browser funktioniert, liegt möglicherweise ein Konfigurationsproblem im nicht funktionierenden Browser vor (dh Sie haben Cookies deaktiviert und vergessen, sie zu aktivieren oder Cookies aus Versehen zu blockieren).

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


Answer #3

Hatte das gleiche Problem - was mir passiert ist, hat unser Server-Admin die session.cookie_secure boolean auf On geändert, was bedeutet, dass Cookies nur über eine sichere Verbindung gesendet werden. Da der Cookie nicht gefunden wurde, erstellte php jedes Mal eine neue Sitzung, daher wurden keine Sitzungsvariablen angezeigt.


Answer #4

Wenn du eine Session in php5 eingibst, dann versuche es auf einer php4-Seite zu lesen, es sieht vielleicht nicht an der richtigen Stelle aus! Machen Sie die Seiten die gleiche PHP-Version oder setzen Sie den Session-Pfad.


Answer #5

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 korrekt gesetzt. Dann habe ich die index.php geändert

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

Ich weiß nicht, was das intern bedeutet, ich erkläre es mir nur, dass die Änderung der Sitzungsvariablen nicht schnell genug war :)


Answer #6

Bearbeite deine php.ini.
Ich denke, der Wert von session.gc_probability ist 1, also setze es auf 0.

session.gc_probability=0

Answer #7

Ich habe ewig nach der Antwort für ein ähnliches Problem gesucht. Es war kein Problem mit dem Code oder dem Setup, da ein sehr ähnlicher Code in einer anderen .php auf demselben Server perfekt funktionierte. Es stellte sich heraus, dass das Problem dadurch verursacht wurde, dass sehr viele Daten in der Sitzung auf dieser Seite gespeichert wurden. An einer Stelle hatten wir eine Zeile wie $_SESSION['full_list'] = $full_list : $_SESSION['full_list'] = $full_list wobei $full_list ein Array von Daten war, die aus der Datenbank geladen wurden; Jede Reihe bestand aus etwa 150 Elementen. Als der Code vor einigen Jahren geschrieben wurde, enthielt die DB nur etwa 1000 Zeilen, also enthielt die $full_list etwa 100 Elemente, die jeweils aus etwa 20 Elementen bestehen. Mit der Zeit verwandelten sich die 20 Elemente in 150 und 1000 Zeilen in 17000, sodass der Code fast 64 Megabyte Daten in der Sitzung speicherte. Offensichtlich weigerte sich diese Menge an Daten, irgendetwas anderes zu speichern. Nachdem wir den Code geändert hatten, um lokal mit Daten umzugehen, ohne sie in der Sitzung zu speichern, funktionierte alles perfekt.


Answer #8

Benutze phpinfo() und überprüfe die session.* Einstellungen.

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

Überprüfen Sie das zuerst und kommen Sie mit den Ergebnissen zurück.

Sie können auch eine print_r($_SESSION); einen Dump dieser Variable haben und den Inhalt sehen ....

In Bezug auf Ihr phpinfo() , ist der session.save_path ein gültiger? Hat Ihr Webserver Schreibzugriff auf dieses Verzeichnis?

Hoffe das hilft.


Answer #9

Ich kenne eine Lösung, die ich gefunden habe (OSX mit Apache 1 und wechselte einfach zu PHP5), als ich ein ähnliches Problem hatte, war das Scharfschalten eines bestimmten Schlüssels (dh Unscharf ($ _SESSION ['key']);) verursachte es nicht zu speichern. Sobald ich den Schlüssel nicht mehr löste, speicherte er. Ich habe das nie wieder gesehen, außer auf diesem Server auf einer anderen Website, aber dann war es eine andere Variable. Es war auch nichts Besonderes.

Danke für diesen Darryl. Das hat mir geholfen. Ich löschte eine Sitzungsvariable und aus irgendeinem Grund hielt sie die Sitzung davon ab, zu committen. Jetzt setze ich es nur auf null (was für meine App in Ordnung ist), und es funktioniert.


Answer #10

Ich hatte Session-Cookie-Pfad auf "//" statt "/" festgelegt. Firebug ist großartig. Hoffe es hilft jemandem.


Answer #11

Ich hatte dieses Problem bei der Verwendung sicherer Seiten, wo ich von www.domain.com/auth.php kam, die zu domain.com/destpage.php umgeleitet wurden. Ich entfernte das WWW vom auth.php Link und es funktionierte. Das hat mich umgehauen, weil sonst alles funktioniert hat; Die Sitzung wurde jedoch nicht eingestellt, als ich am Ziel ankam.


Answer #12

Überprüfen Sie, ob Sie session_write_close (); überall, ich habe dies direkt nach einer anderen Sitzung und dann versuchen, wieder in die Sitzung zu schreiben und es hat nicht funktioniert .. also kommentieren Sie einfach, dass sh * t out


Answer #13

Überprüfen Sie, wer die Gruppe und der Besitzer des Ordners sind, in dem das Skript ausgeführt wird. Wenn die Gruppen-ID oder die Benutzer-ID falsch sind, z. B. auf "root" gesetzt ist, werden die Sitzungen nicht ordnungsgemäß gespeichert.


Answer #14

Ich wollte nur eine kleine Notiz hinzufügen, dass dies auch passieren kann, wenn Sie versehentlich die Anweisung session_start () auf Ihren Seiten verpassen.


Answer #15

Stellen Sie sicher, dass Sie nicht https: // mit http: // mischen. Sitzungsvariablen fließen nicht zwischen sicheren und unsicheren Sitzungen.


Answer #16

Ein paar andere Dinge, die ich tun musste (ich hatte das gleiche Problem: keine Sesson Retention nach PHP Upgrade auf 5.4). Sie brauchen diese nicht, abhängig von der php.ini Ihres Servers (überprüfen Sie 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 Ihre php.ini auf keine Cookies gesetzt werden und die Session-Parameter müssen konsistent sein mit dem, was der osc will.

Sie müssen möglicherweise auch einige Session-Code-Snippets in application_top.php ändern - Objekte erstellen, in denen keine in den Tep_session_is_registered (...) Aufrufen existiert (zB Navigationsobjekt), $ HTTP_ Variablen auf die neueren $ _SERVER Einsen setzen und a einige andere Isset-Tests für leere Objekte (google for info). Am Ende konnte ich die ursprünglichen sessions.php-Dateien (includes / classes und includes / functions) mit einer leicht veränderten application_top.php verwenden, um die 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 Standard installiert hat.


Answer #17

Ich kenne eine Lösung, die ich gefunden habe (OSX mit Apache 1 und wechselte einfach zu PHP5), als ich ein ähnliches Problem hatte, war das Scharfschalten eines bestimmten Schlüssels (dh Unscharf ($ _SESSION ['key']);) verursachte es nicht zu speichern. Sobald ich den Schlüssel nicht mehr löste, speicherte er. Ich habe das nie wieder gesehen, außer auf diesem Server auf einer anderen Website, aber dann war es eine andere Variable. Es war auch nichts Besonderes.


Answer #18

Ein häufig übersehenes Problem ist auch, dass vor dem Befehl session_start () KEIN anderer Code oder zusätzlicher Abstand vorhanden sein darf.

Ich hatte dieses Problem zuvor, wo ich eine leere Zeile vor session_start () hatte, die es nicht richtig funktioniert.





session