2013-04-09 4 views
4

У меня проблема с session_start(). Он создает новый сеанс при каждом обновлении/загрузке страницы.session_start() создает новую сессию при каждом обновлении

вот код:

<?php 
    $bob = session_id(); 
    echo "Session ID on load is ".$bob; 
    echo "<br>"; 
    if($bob==""){ 
     session_start(); 
     $bob = session_id(); 
     echo ' session ID currently is '.$bob; 
    } 
// a bunch more stuff 

, когда я загрузить страницу, я получаю следующее:

Session ID на нагрузке идентификатор сеанса в настоящее время ed320bc5e24c871c9db8ea30e6796c14 (или вариант)

если обновить страницу, я получаю:

ID сессии при загрузке ID сессии в настоящее время fb d69d01d511a7be382799dca7279a86 (или вариант)

идентификатор сеанса всегда пробел перед session_start() называется, и это всегда новый session_id()

Он делает это во всех браузерах, и я проверил, чтобы убедиться, что куки включены.

путь сохранения сеанса указан как /tmp. Я точно не знаю, где это, но просматривая свой корень и все остальные каталоги, я не могу найти файл сеанса (предполагая, что он будет выглядеть примерно как sess_fbd69d01d511a7be382799dca7279a86).

Итак, я думаю, что есть что-то, что происходит с дорогой сохранения, но я слишком новичок в этом, чтобы точно знать, и администраторы сервера не имеют ничего общего. Какими должны быть следующие мои шаги по диагностике проблемы? Сервер работает 5.3.22.

phpinfo является here

Спасибо за любую помощь.

ps вы можете посетить pcm.pcmxa.com, чтобы увидеть проблему самостоятельно, если хотите.

+0

Это можно увидеть, если/tmp не существует, и если php не имеет права на запись в/tmp. Возможно, вам потребуется создать папку самостоятельно или попросить вашего хоста сделать это. – Gavin

+0

'ini_set ('display_errors', 'on'); error_reporting (-1); 'и вы должны увидеть некоторые предупреждения, которые могут помочь. –

+0

@ dev-null-dweller правильный код. – bwoebi

ответ

4

Если ваш каталог сеансов (как, например, /tmp, как вы сказали) не доступен для записи, то он не сможет сохранять и должен будет каждый раз восстанавливать новый. Вот как вы можете проверить это:

if (!is_writable(session_save_path())) { 
    echo 'Session save path "'.session_save_path().'" is not writable!'; 
} 

Если это так, то вам нужно будет иметь админы сервера дают то, что когда-либо пользователь ваш веб-сервер работает как разрешение на запись в каталог/TMP.

+0

Спасибо. Я добавил этот код, но не получил echo, указывающий, что каталог доступен для записи. Я получаю предупреждения об ошибках при использовании set_ini. Предупреждение: session_start(): Не удается отправить сеансовый cookie - заголовки, уже отправленные (вывод запущен в/home/pcmxacom/public_html/pcm/in dex.php: 85) в /home/pcmxacom/public_html/pcm/index.php в строке 91 Строка 91 - это session_start() из кода выше. Предупреждение происходит сразу после эхо-строки «Идентификатор сеанса при загрузке». $ Bob; –

Смежные вопросы