2009-06-22 6 views
2

Kürzlich stolperte ich über einen interessanten Fehler, bei dem Einträge in unserem lokalen benutzerdefinierten Ticketsystem von Benutzern angezeigt wurden, die in der App nicht vorhanden waren. Nach einigem Stöbern stellte ich fest, dass sowohl diese als auch eine andere PHP-App, die auf demselben Server lief, $ _SESSION ['user'] für Authentifizierungszwecke verwendete. Wenn jemand ein System benutzte und dann das andere öffnete, wurde er "automatisch" als Benutzer von der ersten App angemeldet.Sitzungskonflikte in PHP verhindern

Nach dem obligatorischen Facepalm habe ich den Sitzungsvariablennamen in einem der Systeme geändert, um dies zu stoppen. Ich muss jedoch eine permanente, wartungsfreie Änderung an meiner Session-Handling-Klasse vornehmen, um dies in zukünftigen Projekten zu vermeiden. Ich denke, dies könnte durch Verwendung eines eindeutigen Werts (zum Beispiel des Skriptpfads) geschehen, um die Variablen einer Anwendung an einer Stelle in $ _SESSION zu platzieren, die nicht von einer anderen App verwendet wird.

Gibt es einen besseren Weg?

Edit: Dies ist auf Linux. Und beide Apps befinden sich auf derselben Website.

+0

PHP unter Windows oder Linux? Sind beide Apps auf derselben Website? – Kev

Antwort

3

Sie können sicherstellen, dass die Sitzungscookies für die Anwendung spezifisch sind, indem Sie sicherstellen, dass die Domäne und der Pfad der Cookies restriktiv festgelegt werden, z. für eine Anwendung bei http://www.example.com/apppath, können Sie folgendes tun:

<?php 

$currentParams = session_get_cookie_params(); 

session_set_cookie_params($currentParams['lifetime'], '/apppath/', 'www.example.com', $currentParams['secure'], $currentParams['httponly']); 

session_start(); 

Dadurch werden die anderen Sitzungseinstellungen intakt lassen.

Der Pfad ist wahrscheinlich der wichtigste, standardmäßig gibt PHP das Cookie für die Domain aus, für die die Site angefordert wurde (denke ich), so dass Sie wahrscheinlich den Domain-Parameter als Standard belassen könnten.

1

Legen Sie den Cookie-Pfad so fest, dass jede App nur einen Session-Cookie speichert, der für seinen eigenen Pfad gültig ist.

Sie können dies mit dem session_set_cookie_params Aufruf tun.

0

Wenn es um Shared Hosting geht, ist es besser, Sitzungs-ID in der Datenbank zu speichern, anstatt es auf dem Server zu speichern. Es gibt viele Materialien zum Speichern der Sitzungs-ID in der Datenbank Benutzer Session ID kann auch Sicherheit verbessern und Konflikte reduzieren.

Verwandte Themen