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ąć?
11 answers
Try
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
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)
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.
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.
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();
}
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
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.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]);
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,
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()
.
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;
}
}
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