PHP neue session erstellen mit jedem reload

Für meine website, session-management funktioniert auch meistens ok. Sitzungen werden erstellt, gespeichert und später verwendet, ohne Probleme.

Aber wenn der code mit session_start(), der es immer wieder schafft neue, völlig leere session. Code in Frage.

header('Content-Type: text/html; charset=UTF-8');

$main_domain = $_SERVER["HTTP_HOST"];
$expld = explode('.', $main_domain);

if(count($expld) > 2) {
   $tld = array_pop($expld);
   $domain = array_pop($expld);
   $main_domain = $domain . "." . $tld;
}

session_set_cookie_params (0, '/', $main_domain);
session_name('sid');
session_start();
echo session_id();
exit;

Wenn dieses Skript ausgeführt wird, in jedem reload neue Sitzung erstellt wird.

smar@ran ~> ls /tmp/sess_* | wc -l
10
smar@ran ~> ls /tmp/sess_* | wc -l
11
..
smar@ran ~> ls /tmp/sess_* | wc -l
17

Aber nur die eine dieser Sitzungen hat alle Daten drin, und wird von Anwendung.

Ausgabe im browser ist immer die gleiche: 87412d5882jr85gh5mkasmngg7, die id in den browser-Cookies und session-id in /tmp mit Daten aufgefüllt, um es.

Was könnte die Ursache für dieses Verhalten? Leere Dateien sind nicht gerade das große problem, aber Sie machen /tmp (oder session-dir) Recht bevölkert, ohne Grund.

EDIT 1:

Sieht aus wie dieses server-problem, da es funktioniert für einige Menschen. Meine Konfiguration ist Gentoo Linux (32 bit) mit Apache und PHP 5.3.6.

Wenn ich ihn mit Gewalt zu create new session " (wie das entfernen meiner eigenen cookie), es schafft zwei session-Dateien statt einer. Wenn es verwendet alte, schafft es "nur" eine.

EDIT 2:

Session-Konfiguration, wie gewünscht (alle config-Zeilen mit session.):

session.save_handler = files
session.save_path = "/tmp"
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = On
session.bug_compat_warn = On
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5

EDIT 3:

Sogar mehr seltsam, ich habe versucht, die Sitzungen von CLI. Dort, wo keine session-cookies werden immer erstellt eine neue Sitzung. Bei der Einstellung " fixed session-Wert mit session_id() gestoppt neuen Sitzung Schöpfung insgesamt und alte Sitzung statt.

Dieses Verhalten ist identisch mit dem Apache, so dass ich fange an zu vermuten, dass dies Fehler in PHP. Keine neue sessions erstellt, wenn der name, die speziell mit session_id(), und die Sitzung ordnungsgemäß verwendet.

Sogar noch absurder, wenn ich nahm phpsessid aus $_COOKIE["PHPSESSID"] werden und für session_id(), es fing an neue (nutzlose leere) Sitzungen wieder.

EDIT 4:

Da ich nicht Schreibe, reicht es deutlich: einfach

session_start()

als einziges argument bewirkt, dass dieses problem passieren kann, ist es nicht spezifisch für meinen code.

  • was ist session-Zeit? und versuchen zu kommentieren session_set_cookie_params (0, '/', $main_domain); vielleicht anderen Ort Hexe zu setzen session mit dem Namen 'sid'
  • Und was passiert, ob Sie Ihre session_start vor dem senden der Header... ?
  • yup, ohne Erfolg. Auch wenn es der Ort, wo es ist, es nicht schaffen-Sitzung vor der Sitzung Zeug, so dass ich vermute, dies ist der server-Konfiguration Verwandte Dinge. updates der Frage
  • Ich bin mit PHP 5.3.3-7+squeeze1 with Suhosin-Patch (cli) (built: Mar 18 2011 20:10:12), ähnliches problem
  • Ain ' T, dass eine Verletzung der Sicherheit, um Benutzern das Lesen von /tmp ? Es ist freigegeben und die session-ID lesbar ist...
  • ist der Standard-Speicherort, wo PHP speichert sessions. Ich Schätze über 99% der PHP-Installationen spart Sitzungen. Dass viel für eine gemeinsame Sicherheitspolitik. Mich, ich nicht meinen code in shared host, also die Lage ist so sicher wie nichts von PHP Lesen kann. Das ist die Sicherheitslücke auf dem server wahrscheinlich eh.
  • Die Tatsache, dass 99% der Installationen zu tun, macht es nicht richtig... Einst ein Mann, der dachte, dass die Welt rund ist, während der rest der Welt dachte, es ist flach. Aktualisieren Sie die Frage mit session-Konfigurationsoptionen.
  • Ich habe noch zu hören, ein Grund dafür geändert werden. updates
  • Vielleicht ist eine Konfigurationsänderung ist nicht notwendig. Das ist es, was wir versuchen, um herauszufinden,...
  • sorry, wenn ich unhöflich Klang, aber ich bin besorgt der Sicherheit, so dass, wenn es triftigen Grund für die nicht-sessions in /tmp, sondern in anderen Gründen (für einen server niemand, aber admin legal angemeldet), ich möchte es hören. Aber vielleicht würde tatsächlich sein Inhalt eine andere Frage...
  • Ist Ihre Website läuft auf einem port ? Was haben Sie für $main_domain wird nicht wie erwartet ausgeführt, wenn die Domäne enthält einen port.
  • Nein, es ist der standard-port. Bitte beachten Sie auch, dass Sie einfach den Aufruf session_start() das problem verursacht.
  • Können Sie bitte versuchen Sie $main_domain zu Ihrer domain $main_domain = '.example.com'; ? Ich habe das geändert, der code funktioniert hier. ( pastebin.com/iCEV2sWm )
  • Hinzugefügt edit.
  • Sind Sie auf der Ausführung des Skripts auf einem dedizierten/vps-server verwenden oder wenn Sie ein shared-hosting ? Auch sind Sie sicher, dass es kein zusätzliches php.ini-Dateien, überschreibt der session-Einstellungen ?
  • Gibt es nicht irgendwelche Skripts, die sich auf der php... Keine crons, und ich meine Skripte mit etwas völlig anderen Sprache als PHP. Noch sollte es keine PHP überschreibt, die ich getestet habe ohne xdebug bereits, es ist also nicht seine Schuld...
  • Könnten Sie bitte fügen Sie eine php-Skript mit <?php echo phpinfo(); ?>. Öffnen Sie einen browser und suchen Sie nach Configuration File (php.ini) Path, Loaded Configuration File, Scan this dir for additional .ini files, Additional .ini files parsed. Sehen Sie, wenn Sie haben zusätzliche .ini-Dateien geladen werden. Meine Theorien sind: Sie haben eine php.ini-Datei, die Sie nicht kennen; Sie haben ein php addon verursacht;Sie sind php-Paket verbuggt ist irgendwie - versuchen zu kompilieren oder installieren Sie ein neues Paket ( deinstallieren Sie die Vorherige davor ).
  • Ich habe Gentoo, also im Grunde ist alles bereits kompiliert. Vielleicht könnte ich versuchen, mit minimalem useflags oder so, um zu sehen, wenn es passiert, ohne Besondere-Modul... ich werde testen Sie diese ini-Dateien von morgen.
  • Die Standard-php.ini (/etc/php/apach2-php5.3/php.ini) verwendet wird, und es gibt keine anderen ini-Dateien (außer xdebug.ini, die ich getestet habe ohne schon) Es ist darüber zu schweigen .Benutzer.ini-Datei für die benutzerdefinierte ini-Sachen, aber ich denke, dies ist die Standardeinstellung von PHP und Apache nichts setzt es sich (ich weiß nicht, wo suchen Sie es aus, zum start....)
  • Können Sie Ihre uname -a und PHP und Apache Versionen?

InformationsquelleAutor Smar | 2011-07-25
Schreibe einen Kommentar