2009-11-24 11 views
18

Ich habe ein Skript von Drittanbietern und fragte mich, wie ich mit PHP überprüfen kann, wenn session_start() deklariert wurde, bevor Sie etwas tun?Wie überprüfe ich, ob session_start eingegeben wurde?

something like if(isset($_session_start())) { //do something } 
+1

möglich Duplikat von [Test, wenn Sitzung gestartet wird] (http://stackoverflow.com/questions/3357740/test-is-session-is-started) –

+9

Ja, aber das wurde vor 3 Jahren gefragt. Diese Frage wurde vor 2 Jahren gestellt. –

+0

Siehe [Prüfen, ob die PHP-Sitzung bereits gestartet wurde] (https://stackoverflow.com/q/6249707/6521116) –

Antwort

2
if(isset($_SESSION)) { 
    // do something 
} 
13

Ich nehme an, Sie die session_id Funktion nutzen könnten:

session_id() returns the session id for the current session or the empty string ("") if there is no current session (no current session id exists).

Oder vielleicht testen, ob $_SESSION gesetzt ist oder nicht, mit isset, könnte den Trick tun, da es nicht gesetzt werden soll Wenn keine Sitzung gestartet wurde, müssen Sie nur hoffen, dass nichts $_SESSION zuweist, ohne zuerst die Sitzung zu starten.

1
function session_started(){ return !!session_id(); } 
+3

Don bin nicht zu schlau;). Ich würde 'return (session_id()! == "") bevorzugen. – middus

36
if(!isset($_SESSION)) { 
    session_start(); 
} 

Die Überprüfung ermöglicht es Ihnen, Ihre aktuelle Sitzung aktiv zu halten, auch wenn es eine Schleife zurück Einreichung Anwendung auf dem Sie die Form wieder zu verwenden, wenn die Daten falsch eingegeben werden oder zusätzliche Kontrolle innerhalb Ihres Programms bevor Sie zum nächsten Programm übergehen.

+8

Ich würde empfehlen, 'if (session_id() == '')' zu verwenden, da '$ _SESSION' eingestellt werden kann, während die Sitzung geschlossen wird. – Ragnagord

+0

True, aber alle $ _SESSION ['Variablen'] werden beim Start der Sitzung auf null gesetzt. Session_id() s sind clientseitige Cookie-Werte. Es hängt vom Entwickler ab, wie die Sitzungsdaten verwendet werden. – Maarek

+0

@Maarek Jedes Mal, wenn 'session_start()' aufgerufen wird, werden die Sitzungsvariablen NICHT alle auf null gesetzt. Und wenn eine Sitzung geschlossen wird (durch Beenden des Skripts oder durch Aufruf von 'session_write_close()'), bleiben die Sitzungsdaten bestehen. In solchen Fällen ist Ihre Überprüfung nicht ausreichend, da eine geschlossene Sitzung nicht gestartet wird. – Stefan

-1

    if(defined('SID')) 
     // do 
7

für PHP mehr darüber lesen> = 5.4.0

if (session_status() == PHP_SESSION_NONE) { 
session_start(); 
} 

für PHP < 5.4.0

if(session_id() == '') { 
session_start(); 
} 
+1

Dies ist die empfohlene Methode. [http://www.php.net/manual/en/function.session-status.php](http://www.php.net/manual/en/function.session-status.php) –

+0

Beachten Sie, dass die <5.4.0 Lösung ist ziemlich nutzlos. session_id() gibt immer eine leere Zeichenfolge zurück, bis session_start() aufgerufen wird. Es wird jedes Mal aufgerufen. –

0

Wenn Sitzung bereits begonnen, Fehler: "Fatal error: Kann Funktion Rückgabewert nicht Kontext in Schreib verwenden"

Try this:

$session = session_id(); 
if(empty($session)){ 
    session_start(); 
} 
0

Ich schrieb nur eine einfache Funktion für sie.

function isSessionStart() 
    { 
    if (version_compare(phpversion(), '5.4.0', '<')) { 
     if(session_id() == '') { 
     return false; 
     } 
     return true; 
    } 
    else { 
     if (session_status() == PHP_SESSION_NONE) { 
     return false; 
     } 
     return true; 
    } 
    } 
0

beste weg arbeit für mich! if (session_status()! = 1) session_start();

Verwandte Themen