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?

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();
    }
  }
}

5voto

user3140580 Punkte 63

Das Einzige, was Sie tun müssen, ist:

<?php
if(!isset($_SESSION))
{
session_start();
}
?>

3voto

sangram desai Punkte 31

@ vor einem Funktionsaufruf unterdrückt alle Fehler, die während des Funktionsaufrufs gemeldet werden können.

Hinzufügen einer @session_start sagt PHP, dass es keine Fehlermeldungen ausgeben soll.

Zum Beispiel:

Verwendung von session_start() nachdem Sie bereits etwas an den Browser ausgegeben haben, führt zu einem Fehler, so dass PHP etwas wie "headers cannot be sent: started at (line 12)" anzeigen wird, @session_start() schlägt auch in diesem Fall fehl, aber die Fehlermeldung wird nicht auf dem Bildschirm ausgegeben.

Bevor Sie die Dateien einbinden oder auf eine neue Seite umleiten, verwenden Sie die exit() Funktion, andernfalls wird ein Fehler ausgegeben.

Dieser Code kann in allen Fällen verwendet werden:

    <?php 
        if (session_status() !== PHP_SESSION_ACTIVE || session_id() === ""){
            session_start(); 
        }
    ?>

3voto

Alex Khimich Punkte 648

Ich bin mir nicht sicher, ob eine solche Lösung effizient ist, aber dies ist ein Arbeitsprojekt Dies wird auch verwendet, wenn Sie die Standardsprache definieren müssen

   /**
    * Start session
    * Fall back to ukrainian language
    */
   function valid_session() {
    if(session_id()=='') {
        session_start();
        $_SESSION['lang']='uk';
        $_SESSION['lang_id']=3;
    }
    return true;
  }

2voto

Unter PHP 5.3 funktioniert das bei mir:

if(!strlen(session_id())){
    session_name('someSpecialName');
    session_start();
} 

dann haben Sie das. Wenn Sie das "not at if"-Statement nicht an den Anfang setzen, wird die Sitzung auf irgendeine Art und Weise beginnen, ich weiß nicht warum.

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