2010-12-22 16 views
1

Ich habe eine PHP-Anwendung, die Sitzungsvariablen ziemlich viel abhängt. Nach der Anmeldung wird der Benutzer auf eine Seite umgeleitet, die Code ausführt, um eine Menge von Sitzungsvariablen einzurichten, abhängig davon, wer der Benutzer ist. Die Anwendung verwendet Daten aus verschiedenen Quellen und die Sitzungen werden zum Speichern von ID-Nummern zum Abfragen der Datenbanken verwendet.PHP: Alternative zu SESSIONS

Wenn der Benutzer also eine Seite aufruft, die sein Asset-Management-System abfragt, wird seine ID für diese bestimmte Datenbank über die Sitzung aufgerufen.

Ich hatte vor kurzem eine Menge Probleme mit Sitzungsvariablen. Manchmal wird während der Laufzeit der App nur eine Sitzungsdatei erstellt, und manchmal führt jede Sitzungsanforderung zu einer neuen Sitzungs-ID (es ist noch immer nicht gelungen, den Grund herauszufinden!).

Meine Frage ist dies. Gibt es eine Alternative zur Verwendung von Sitzungsvariablen dafür? Wie Globals oder anders?

Ich habe eine Frage offen über meine Session Problem hier - PHP session variables not being maintaned

Antwort

2

Eine weitere Alternative besteht darin, Sitzungsdaten in der Datenbank zu speichern, um dem Benutzer ein Cookie mit Ihrer Sitzungs-ID zu geben. Das gibt Ihnen mehr Kontrolle über Sitzungen.

+0

das klingt gut, aber ich habe ein Problem, wo für jede Sitzung Anfrage eine neue Session-ID generiert wird. Also, wenn ich ihnen eine Sitzungs-ID gab, ist es wahrscheinlich, dass sie sich ändern oder überschrieben würde. – iamjonesy

+0

Eigentlich ist es ein Cookie-Problem. Erstellen Sie ein Cookie auf einer Seite, navigieren Sie zu einer anderen Seite und der Cookie ist weg – iamjonesy

+0

Das ... ... so funktionieren Sessions im Allgemeinen trotzdem, der Server speichert nur ein bestimmtes Session-Token, das von php automatisch erstellt wurde. Sei dir also bewusst, dass aus dieser Perspektive nichts wirklich gewonnen wird. – Kzqai

-1

Die Alternative zu Sitzungen ist Cookies (in der Tat sind die Sitzungen in der Regel Cookies implementiert). Aber Cookies sollten nur verwendet werden, wenn Sie kleine Datenmengen speichern möchten.

1

Nein, da jede Benutzersitzung ihre einen Werte haben sollte, benötigen Sie eine Art Session-Mechanismus. Und dafür ist die Sitzung von PHP in Ordnung. Sie müssen es wahrscheinlich nur richtig konfigurieren, um Ihre Anforderungen zu erfüllen.

2

Sie könnten eine andere "Sitzungs" -Lösung verwenden, aber dafür müssen Sie mehr Wasserleitungen installieren.

Beispielsweise könnten Sie urlbasierte Sitzungen verwenden, bei denen jede URL, die die Site generiert, eine Sitzungs-ID enthält. Dies ist in der Regel ein wesentliches Redesign der Site und das einzige Mal, wenn es erforderlich ist, wenn Sie dieselbe Sitzung über mehrere Domänen haben ODER wenn Sie möchten, dass derselbe Computer verschiedene Sitzungen in verschiedenen Fenstern im Browser ausführt.

Aber in Ihrem Fall würde ich überprüfen, warum die Sitzungen unterbrochen sind, es ist wahrscheinlich ein Konfigurationsproblem oder Sie haben etwas anderes, das die Sitzungsdateien vermasselt.

Ich hatte nie Probleme mit PHP-Sessions, sie gerade arbeiten;)

0

Sessions wie die richtige Lösung für diese zu sein scheinen. Im Allgemeinen funktionieren Sitzungen folgendermaßen: Ein Sitzungsobjekt wird auf dem Server erstellt und mit einer ID versehen. Die ID wird in einem Cookie an den Browser gesendet und auf Anforderung des Browsers an den Server gesendet, wodurch der Server das korrekte Sitzungsobjekt aus dem Speicher holen kann.

Sie möchten vielleicht sehen, wie Ihre Sitzung konfiguriert ist. Wenn Sie Sitzungen "verlieren", kann eine mögliche Ursache sein, dass Sie zwischen Subdomains "springen" und den Sitzungscookie nur für eine Subdomäne festlegen lassen. Ein anderer Grund könnte sein, dass Sie in Ihrer Sitzung einen zu niedrigen Ablauf haben.

+0

danke für die Beantwortung Ich habe eine Frage zu Sitzung Problem hier öffnen - http://StackOverflow.com/Questions/4358525/HP-Session-Variablen-not-Being-maintained – iamjonesy

0

Cookies sind nicht wirklich eine Alternative, insbesondere wenn sie für Logins verwendet werden, da sie vom Benutzer geändert werden können, während für Sitzungen einfach einen Cookie mit einem identifizierenden Hash auf ihrem Computer speichern und ändern wird nicht erhalten sie sehr weit.

Wie auch immer, Sitzungen Arbeit. Ihr Problem ist zweifellos ein Implementierungsproblem. Ich schlage vor, dass Sie etwas Zeit mit dem Debuggen und Testen verbringen, da die Implementierung einer alternativen Methode zu einem unglaublich komplexeren Code führt - und Sie wollen es nicht tun, da Sitzungen Ihnen bereits Probleme bereiten.

0

Für Ihre Sitzungen, die bei jeder Anforderung neu erstellt werden, sollten Sie versuchen, die Cookies zu debuggen, die vom Server an Sie gesendet werden. Überprüfen Sie in diesen Cookies, ob die Cookie-Domain die richtige ist (und prüfen Sie auch den Cookie-Pfad).

Um Cookies zu debuggen, können Sie in der Web Developer Toolbar anzeigen, welche Cookies nach dem Laden der Seite aktiv sind. Aber das beste Werkzeug ist Live-Http-Header, überprüfen Sie die vom Server gesendeten echten Header, dort finden Sie den echten Cookie-Inhalt, und wenn es einen Konflikt in der Cookie-Domäne gibt (zum Beispiel - aber die meiste Zeit ist das), Ihr Browser speichert dieses Cookie nicht für Ihre Website.

Falls Ihr Browser ignorieren ein Cookie, nächste Seite, die Sie PHP fordern Sie eine weitere Sitzung baut usw.

Wenn Sie nicht Sie cooki System erhalten Sie zu arbeiten in PHP, die alte Art und Weise der Aufnahme-Sessions Id verfolgen, die war Verwenden eines permanenten get- und/oder post-Parameters mit der PHPSESSID. Sie benötigen - enable-rans-id auf Ihrer PHP-Kompilierung (überprüfen Sie es auf einer phpinfo-Seite) http://www.php.net/manual/en/session.idpassing.php