Проверьте, началась ли сессия PHP - PullRequest
426 голосов
/ 06 июня 2011

У меня есть PHP-файл, который иногда вызывается со страницы, с которой начался сеанс, а иногда со страницы, с которой не начался сеанс. Поэтому, когда у меня есть session_start() в этом скрипте, я иногда получаю сообщение об ошибке «сессия уже началась». Для этого я поставил эти строки:

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

но на этот раз я получил это предупреждение:

Примечание: неопределенная переменная: _SESSION

Есть ли лучший способ проверить, началась ли сессия?

Если я использую @session_start, это заставит все работать правильно и просто закроет предупреждения?

Ответы [ 26 ]

0 голосов
/ 14 августа 2018

я закончил с двойной проверкой статуса. php 5.4 +

if(session_status() !== PHP_SESSION_ACTIVE){session_start();};
if(session_status() !== PHP_SESSION_ACTIVE){die('session start failed');};
0 голосов
/ 13 мая 2018

Исходя из моей практики, перед тем как получить доступ к $_SESSION[], вам нужно каждый раз звонить session_start, чтобы использовать скрипт.См. Ссылку ниже для руководства.

http://php.net/manual/en/function.session-start.php

Для меня, по крайней мере, session_start сбивает с толку как имя.A session_load может быть более ясным.

0 голосов
/ 06 октября 2017

Это то, что я использую, чтобы определить, начался ли сеанс. Используя empty и isset следующим образом:

if (empty($_SESSION)  && !isset($_SESSION))  {
    session_start();
}
0 голосов
/ 17 августа 2016

Заменить session_start(); на:

if (!isset($a)) {
    a = False;
    if ($a == TRUE) {
        session_start();
        $a = TRUE;
    }
}
0 голосов
/ 16 декабря 2015
session_start();
if(!empty($_SESSION['user']))
{     
  //code;
}
else
{
    header("location:index.php");
}
0 голосов
/ 25 декабря 2015

PHP_VERSION_ID доступен начиная с PHP 5.2.7, поэтому сначала проверьте это и, если необходимо, создайте его. session_status доступно с PHP 5.4, поэтому мы должны проверить это также:

if (!defined('PHP_VERSION_ID')) {
    $version = explode('.', PHP_VERSION);
    define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}else{
    $version = PHP_VERSION_ID;
}
if($version < 50400){
    if(session_id() == '') {
        session_start();
    }
}else{
    if (session_status() !== PHP_SESSION_ACTIVE) {
        session_start();
    }
}
...