В моем PHP код, если сеанс уже начался, и я стараюсь, чтобы начать новую, я получаю следующее уведомление:PHP сессий, которые уже начали
Примечание: Сеанс был уже начато - игнорирование session_start()
Как я могу избежать этого?
В моем PHP код, если сеанс уже начался, и я стараюсь, чтобы начать новую, я получаю следующее уведомление:PHP сессий, которые уже начали
Примечание: Сеанс был уже начато - игнорирование session_start()
Как я могу избежать этого?
Попробуйте
<?php
if(!isset($_SESSION))
{
session_start();
}
?>
Простой и работает ... это все, что мне нужно @valeriyGorbatikov –
Вы должны уже называют началом сеанса, может быть, который вызывается снова через включаемый?
if(! $_SESSION)
{
session_start();
}
Если вы хотите новый, выполните session_destroy()
перед его запуском. Чтобы проверить, если множество его перед запуском, вызовите 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();
}
Я хотел бы избежать проверки глобальной $_SESSION
вместо вызова метода session_status()
поскольку PHP реализована эта функция явно:
Expose статус сеанса с помощью новой функции, session_status Это для (PHP> = 5.4.0)
<?php
if (session_id() != "") {
session_start();
}
В принципе, вам нужно проверить, был ли сеанс запущен до создания другого; ... more reading.
С другой стороны, вы решили уничтожить существующую сессию, прежде чем создавать другую, используя session_destroy()
.
Только если вы хотите уничтожить предыдущую сессию:
<?php
if(!isset($_SESSION))
{
session_start();
}
else
{
session_destroy();
session_start();
}
?>
или вы можете использовать
unset($_SESSION['variable_session _data'])
уничтожить конкретную переменную сеанса.
Да, вы можете определить, работает ли сеанс, проверив isset($_SESSION)
. Однако лучший ответ - просто не звонить session_start()
более одного раза.
Его следует называть очень рано в вашем скрипте, возможно, даже в первой строке, а затем не вызывать снова.
Если у вас есть это в более чем одном месте в вашем коде, тогда вы просите получить такую ошибку. Сократите это, так что это только в одном месте и может быть вызвано только один раз.
попробовать это
if(!isset($_SESSION)){
session_start();
}
Я предлагаю вам использовать ob_start(); перед запуском любого sesson varriable, это должно заказывать буфер браузера.
изменения: Добавлен дополнительный) после того, как $ _SESSION
заменить session_start(); к
if(!isset($a))
{
$a = False;
if($a == TRUE)
{
session_start();
$a=TRUE;
}
}
Это почти дубликат ответов, которые были вокруг в течение многих лет, за исключением вашего менее правильного. Что такое '$ a' - возможно, вы уже установили его где-то еще. Проверка на '$ _SESSION' имеет смысл. – moopet
Ни один из вышеперечисленных не подходит, без вызова session_start() во всех PHP файлов, которые зависят от переменных $ Session они не будут включены. Уведомление настолько раздражает и быстро заполняет Error_log. Единственным решением, которое я могу найти, является то, что это ...
error_reporting(E_ALL^E_NOTICE);
session_start();
Плохое исправление, но оно работает.
Я столкнулся с этой проблемой при попытке зафиксировать поведение блокировки $ _SESSION.
http://konrness.com/php5/how-to-prevent-blocking-php-requests/
Файл сессии остается заблокированным до тех пор, пока скрипт завершает или сеанс вручную закрыт.
Таким образом, по умолчанию страница должна открывать сеанс в режиме только для чтения. Но как только он открыт только для чтения, он должен быть закрыт и снова открыт в режиме записи.
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
Затем, когда вы идете, чтобы написать какую-то ценность:
WriteSessionValues(["username"=>$login_user]);
Было бы более эффективным:
@session_start();
избежать обработчика ошибок в окне
Best,
Не начинайте новый сеанс, если старый бежит? –
Возможный дубликат [Как узнать, активен ли сеанс?] (Http://stackoverflow.com/questions/3788369/how-to-tell-if-a-session-is-active) - пожалуйста, используйте поиск до задавая вопрос. – hakre