518 Stimmen

Prüfen, ob die PHP-Sitzung bereits begonnen hat

Ich habe eine PHP-Datei, die manchmal von einer Seite aufgerufen wird, die eine Sitzung gestartet hat, und manchmal von einer Seite, auf der keine Sitzung gestartet ist. Wenn ich also session_start() bei diesem Skript erhalte ich manchmal die Fehlermeldung "Sitzung bereits gestartet". Dafür habe ich diese Zeilen eingefügt:

if(!isset($_COOKIE["PHPSESSID"]))
{
  session_start();
}

aber dieses Mal erhielt ich diese Warnmeldung:

Hinweis: Undefinierte Variable: _SESSION

Gibt es eine bessere Möglichkeit zu prüfen, ob die Sitzung bereits begonnen hat?

Wenn ich die @session_start Wird es dafür sorgen, dass die Dinge richtig funktionieren und die Warnungen einfach verstummen?

22voto

y o Punkte 1113

Vor PHP 5.4 gibt es keine zuverlässige Möglichkeit, dies herauszufinden, außer dem Setzen eines globalen Flags.

Bedenken Sie:

var_dump($_SESSION); // null
session_start();
var_dump($_SESSION); // array
session_destroy();
var_dump($_SESSION); // array, but session isn't active.

Oder:

session_id(); // returns empty string
session_start();
session_id(); // returns session hash
session_destroy();
session_id(); // returns empty string, ok, but then
session_id('foo'); // tell php the session id to use
session_id(); // returns 'foo', but no session is active.

Vor PHP 5.4 sollten Sie also einen globalen Booleschen Wert setzen.

13voto

supersuphot Punkte 548

Für alle php-Versionen

if ((function_exists('session_status') 
  && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
  session_start();
}

11voto

Elshan Punkte 6570

Prüfen Sie dies:

<?php
/**
* @return bool
*/
function is_session_started()
{
    if ( php_sapi_name() !== 'cli' ) {
        if ( version_compare(phpversion(), '5.4.0', '>=') ) {
            return session_status() === PHP_SESSION_ACTIVE ? TRUE : FALSE;
        } else {
            return session_id() === '' ? FALSE : TRUE;
        }
    }
    return FALSE;
}

// Example
if ( is_session_started() === FALSE ) session_start();
?>

Quelle http://php.net

8voto

Wesley van Opdorp Punkte 14770

Verwenden Sie session_id() wird ein leerer String zurückgegeben, wenn er nicht gesetzt ist. Das ist zuverlässiger als die Überprüfung der $_COOKIE .

if (strlen(session_id()) < 1) {
    session_start();
}

6voto

Dustin Poissant Punkte 2885

Dies sollte für alle PHP-Versionen funktionieren. Es ermittelt die PHP-Version und prüft dann, ob die Sitzung auf der Grundlage der PHP-Version gestartet ist. Wenn die Sitzung nicht gestartet ist, wird sie gestartet.

function start_session() {
  if(version_compare(phpversion(), "5.4.0") != -1){
    if (session_status() == PHP_SESSION_NONE) {
      session_start();
    }
  } else {
    if(session_id() == '') {
      session_start();
    }
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X