Już rozpoczęte sesje PHP

W moim kodzie PHP, jeśli sesja już się rozpoczęła, a ja próbuję rozpocząć nową, otrzymuję następującą informację:

Uwaga: sesja została już rozpoczęta-ignorując session_start ()

Jak mogę tego uniknąć?

 59
Author: hakre, 2012-05-18

11 answers

Try

<?php
    if(!isset($_SESSION)) 
    { 
        session_start(); 
    } 
?>
 182
Author: Valeriy Gorbatikov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-18 08:09:20

Jeśli chcesz nowy, zrób session_destroy() przed uruchomieniem. Aby sprawdzić, czy jest ustawiony przed uruchomieniem, wywołaj session_status() :

$status = session_status();
if($status == PHP_SESSION_NONE){
    //There is no active session
    session_start();
}else
if($status == PHP_SESSION_DISABLED){
    //Sessions are not available
}else
if($status == PHP_SESSION_ACTIVE){
    //Destroy current and start new one
    session_destroy();
    session_start();
}

Uniknąłbym sprawdzania globalnego $_SESSION zamiast z wywołuję metodę session_status() ponieważ PHP zaimplementowało tę funkcję jawnie do:

Ujawnia status sesji poprzez nową funkcję session_status To jest dla (PHP >=5.4.0)

 25
Author: Juan Cortés,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-14 17:36:33

Tylko jeśli chcesz zniszczyć poprzednią sesję:

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

Lub możesz użyć

unset($_SESSION['variable_session _data'])

Aby zniszczyć określoną zmienną sesji.

 3
Author: Code Spy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-18 08:52:23

Tak, możesz sprawdzić, czy sesja jest już uruchomiona, sprawdzając isset($_SESSION). Jednak najlepszą odpowiedzią jest po prostu nie dzwonić session_start() więcej niż jeden raz.

Powinno być wywoływane bardzo wcześnie w skrypcie, być może nawet w pierwszej linii, a następnie nie wywoływane ponownie.

Jeśli masz go w więcej niż jednym miejscu w kodzie, to prosisz o taki błąd. Wyciąć go tak, że jest tylko w jednym miejscu i może być wywołany tylko raz.

 2
Author: Spudley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-18 23:32:36

Musisz już wywołana sesja zacząć może być wywołana ponownie przez include?

if( ! $_SESSION)
{
    session_start();
}  
 1
Author: MikeCruz13,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-18 08:11:38

Spróbuj tego

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

Proponuję użyć ob_start (); przed uruchomieniem dowolnego sesson varriable, powinno to uporządkować bufor przeglądarki.

Edit: dodano dodatkowy ) po $_SESSION

 0
Author: user2521037,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-24 23:32:38

Żadne z powyższych nie było odpowiednie, bez wywołania session_start () we wszystkich plikach php, które zależą od zmiennych $Session, nie będą one dołączane. Zawiadomienie jest tak irytujące i szybko wypełnić Error_log. Jedyne rozwiązanie, które mogę znaleźć, to to....

    error_reporting(E_ALL ^ E_NOTICE);
    session_start();
Zła poprawka, ale działa.
 0
Author: Wayne Kirk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-16 08:37:04

Napotkałem ten problem, próbując naprawić zachowanie blokujące $_SESSION.

Http://konrness.com/php5/how-to-prevent-blocking-php-requests/

Plik sesji pozostaje zablokowany do momentu zakończenia skryptu lub sesja jest ręcznie zamykana.

Tak więc domyślnie strona powinna otwierać sesję w trybie tylko do odczytu. Ale gdy jest otwarty w trybie tylko do odczytu, musi być zamknięty i ponownie otwarty w trybie zapisu.

const SESSION_DEFAULT_COOKIE_LIFETIME = 86400;

/**
 * Open _SESSION read-only
 */
function OpenSessionReadOnly() {
    session_start([
                      'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME,
                      'read_and_close'  => true,    // READ ACCESS FAST
                  ]);
    // $_SESSION is now defined. Call WriteSessionValues() to write out values
}

/**
 * _SESSION is read-only by default. Call this function to save a new value
 * call this function like `WriteSessionValues(["username"=>$login_user]);`
 * to set $_SESSION["username"]
 *
 * @param array $values_assoc_array
 */
function WriteSessionValues($values_assoc_array) {
    // this is required to close the read-only session and 
    // not get a warning on the next line.
    session_abort();

    // now open the session with write access
    session_start([ 'cookie_lifetime' => SESSION_DEFAULT_COOKIE_LIFETIME ]);

    foreach ($values_assoc_array as $key => $value) {
        $_SESSION[ $key ] = $value;
    }
    session_write_close();  // Write session data and end session

    OpenSessionReadOnly(); // now reopen the session in read-only mode.
}

OpenSessionReadOnly();  // start the session for this page

Wtedy, gdy pójdziesz napisać jakieś wartość:

WriteSessionValues(["username"=>$login_user]);
 0
Author: TrophyGeek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-16 19:50:11

Byłoby bardziej wydajne:

@session_start();

Unikanie obsługi błędów na ekranie

Best,

 0
Author: Jos3,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-23 22:48:47
<?php
if ( session_id() != "" ) {
    session_start();
}

Zasadniczo musisz sprawdzić, czy sesja została rozpoczęta przed utworzeniem kolejnej; ... więcej czytania .

Z drugiej strony, zdecydowałeś się zniszczyć istniejącą sesję przed utworzeniem kolejnej za pomocą session_destroy().

 0
Author: Odinn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-02 01:39:26

Zastąp session_start(); do

if(!isset($a))
{

$a = False;
if($a == TRUE)
{
    session_start();
    $a=TRUE;
}

}
 -3
Author: Harshit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-17 05:08:02