Ответ 1
Переместите свой код в начало файла header.php. И проверьте, существует ли сеанс:
if(session_id() == '')
session_start();
your code here...
Я создаю двуязычный сайт и решил использовать session_start
для определения языка страницы, используя следующее:
session_start();
if(!isset($_SESSION['language'])){
$_SESSION['language'] = 'English'; //default language
}
Проблема заключается в том, что он сталкивается с Wordpress, и я получаю следующее:
Предупреждение: session_start() [function.session-start]: не удается отправить сеанс cookie - заголовки, уже отправленные (вывод начался с /home/neurosur/public _html/v2/wp-content/themes/default/header.php:8) в /home/neurosur/public _html/v2/wp-content/themes/default/region.php в строке 13
Есть ли способ обойти это?
Переместите свой код в начало файла header.php. И проверьте, существует ли сеанс:
if(session_id() == '')
session_start();
your code here...
ИЗМЕНИТЬ
Wordpress отправляет информацию заголовка перед запуском файла header.php. Поэтому начало сеанса в файле header.php может по-прежнему противоречить информации заголовка, которую посылает wordpress. Запуск его на init позволяет избежать этой проблемы. (Из комментария jammypeach)
Запишите следующий код в файл functions.php:
function register_my_session()
{
if( !session_id() )
{
session_start();
}
}
add_action('init', 'register_my_session');
Теперь, если вы хотите установить данные в сеансе, выполните следующие действия:
$_SESSION['username'] = 'rafi';
Я нашел интересную статью Peter здесь. Я использую следующий код в своем functions.php
:
add_action('init', 'myStartSession', 1);
add_action('wp_logout', 'myEndSession');
add_action('wp_login', 'myEndSession');
function myStartSession() {
if(!session_id()) {
session_start();
}
}
function myEndSession() {
session_destroy ();
}
Это разрушает старый сеанс, когда пользователь снова выходит из системы с другой учетной записью.