php session_start mit Include-Dateien

7

Ich habe viel über den Sitzungsbeginn von meiner vorherigen Frage gelernt . Jetzt frage ich mich, wie Sitzungssperre auftritt, wenn Dateien in anderen Dateien enthalten sind. Sagen wir, ich habe:

page.php

%Vor%

header.php:

%Vor%

sub_seite.php

%Vor%

Wenn ich page.php öffne, wird die Sitzung entsperrt, sobald die header.php fertig ist? oder ist es live für das gesamte page.php life, also ist die Sitzung von sub_page blockiert? Ist die session_start in sub_page notwendig? Wäre es besser, wenn ich session_write_close jedes Mal wenn ich mit Sitzungsdaten fertig bin? (Obwohl das immer session_start ing bedeuten würde, würde ich gerne eine Sitzungsvariable verwenden).

    
Andrea 02.08.2011, 15:09
quelle

5 Antworten

9
  1. Sie sollten die Sitzung nur einmal starten. In Ihrem Beispiel brauchen Sie nur session_start () in der ersten Zeile von page.php
  2. session_start () generiert E_NOTICE, wenn die Sitzung zuvor gestartet wurde. Sie können @session_start () verwenden, um es zu ignorieren.
  3. Es generiert auch E_NOTICE, wenn Sie session_start () nach der Ausgabe von HTML-Code verwenden.
sonnb 02.08.2011, 16:06
quelle
10

Ich würde empfehlen, eine session.php -Datei zu erstellen, die Sie einmal in der ersten Zeile jeder Seite einschließen würden. Auf diese Weise wird die Sitzung in EINER Datei behandelt, falls Sie die Validierungs- oder Sitzungseinstellungen ändern müssen (und sich nicht um Ihre Frage kümmern müssen).

    
Evan Mulawski 02.08.2011 15:17
quelle
6
  

Ab PHP 4.3.3 führt der Aufruf von session_start () nach dem Start der Sitzung zu einem Fehler der Ebene E_NOTICE. Außerdem wird der zweite Sitzungsstart einfach ignoriert.

    
Brian Gordon 02.08.2011 15:15
quelle
4

Aufgrund der obigen Antworten über Fehler, wenn die Sitzung bereits gestartet wurde, wollte ich nur darauf hinweisen, dass Sie Folgendes tun können:

%Vor%

Wenn $ _SESSION bereits gestartet ist, wird die Startfunktion nicht ausgeführt.

Obwohl es nichts Besseres gibt als ein gut strukturiertes Datei- und Ordner-Layout mit einem guten Framework-Setup. Auch wenn es sich nur um eine einfache Framework-Struktur handelt, die Geschäftslogik von Präsentation unterscheidet.

Auf diese Weise haben Sie etwas, das einem Konfigurationsordner mit Initialisierungsskripten ähnlich ist, oder zumindest include Dateien in einem Ordner, die in allen Seiten / Skripten enthalten sind.

Dann haben Sie einfach Ihre session_start() in (abhängig von Ihrer Einrichtung) entweder die allererste Include-Datei oder in einer separaten Include-Datei und fügen Sie dann diese Session-Datei bei Bedarf in einem bestimmten Bereich des Skripts ein.

In beiden Fällen müssen Sie sie dann nicht in any anderen Dateien aufrufen, da Sie wissen, dass dies aufgrund Ihrer Entwurfsstruktur nicht erforderlich ist.

Wenn Sie keine Datei haben, die immer ist, verwenden Sie mindestens isset() check.

    
James 23.02.2014 20:47
quelle
1

Solange Sie nicht auf Sitzungsvariablen zugreifen oder diese erstellen, müssen Sie sich nicht um session_start () kümmern. Sie müssen sich nur um session_start kümmern, wenn das Skript, das Sie ausführen, Sitzungsvariablen erstellt oder auf Sitzungsvariablen zugreift, um zu funktionieren.

Wenn Datei1 nicht auf Variablen zugreift oder sie erstellt, die von anderen Skripten verwendet werden können, rufen Sie sie nicht auf. Wenn Datei2, die in Datei1 enthalten ist, Variablen in der Sitzung erstellt oder auf sie zugreift, sollte Datei2 session_start () aufrufen. Datei2 wird in die Sitzung aufgenommen und kann auf alle Sitzungsvariablen zugreifen, aber Datei1 wird nicht.

Wenn Sie in Datei1 session_start () aufrufen, kann Datei2 auf alle Sitzungsvariablen zugreifen, als würde sie session_start () aufrufen.

Ich hoffe, dies verdeutlicht die Situation ein wenig mehr.

Toller Tipp von James, der isset benutzt. Dies verhindert den Versuch eines sinnlosen Sitzungsaufrufs.

Überprüfen Sie auch Ihre php.ini-Datei auf die Session.auto_start var. Wenn dies auf 1 gesetzt ist, werden alle Dateien so ausgeführt, als hätten sie einen Aufruf von session_start () gemacht. Setzen Sie es in der Datei php.ini auf 0, wenn Sie es selbst steuern möchten.

    
noowie 28.08.2016 11:35
quelle

Tags und Links