2013-03-07 3 views
2

Я хочу возобновить сеанс. Поэтому я передаю идентификатор сеанса и пытаюсь возобновить сеанс так:PHP session_start не возобновляет сеанс

session_save_path($_SERVER["DOCUMENT_ROOT"].'/mysessions'); 
    if(!empty($_POST['session_id'])) { 
     session_id($_POST['session_id']); // $_POST['session_id'] = "4dkwkeiugraqhfpeq745l2c2a1"; 
     session_start(); 
    } 

    $session_var = $_SESSION['property_name']; // <- null even though there was something there 

    ob_start(); 
    var_dump($_SESSION); 
    $session_data = ob_get_clean(); // $session_data = NULL 

Я вижу, что физический файл сессия существует «sess_4dkwkeiugraqhfpeq745l2c2a1» в папке сессии, где я хранить свои сессии. Три - это данные. Однако сеанс не возобновляется. После звонка session_start(), $_SESSION переменных нет.

Что мне здесь не хватает?

+1

Вы пробовали с жестко запрограммированным идентификатором сеанса? Вы проверили фактическую длину '$ _POST ['session_id']' (возможно, внутри есть пробел)? – Leri

+0

Это происходит после закрытия страницы и ввода снова? Возможно, сервер запускает другой сеанс с другим id – letiagoalves

+2

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

ответ

1

Что мне здесь не хватает?

Это трудно сказать. session_id() - это правильная функция для изменения идентификатора сеанса, однако session_save_path() может отличаться. Итак, вы считаете, что сеанс находится на диске, но это неправильный каталог.

Или даже другой обработчик сохранения, поэтому даже не сохраняя диск, а в базу данных.

Также внутри вашего кода я не вижу никакой проверки, чтобы проверить, действительно ли $_SESSION пуст или нет, поэтому неясно, где вы это проверяете. Вы должны проверить это непосредственно после session_start(), чтобы вы знали, были ли данные загружены или нет.

+0

Я просто посмотрел, и session_save_path возвращает каталог '/ var/lib/php/session', который не является тем способом, в котором я сохраняю свои сеансы. Я устанавливаю путь явно перед выполнением вызова. Я не уверен, почему он будет сброшен на что-то еще. Я предполагаю, что 'var/lib/php/session' является своего рода дефолтом? –

+0

'var/lib/php/session' - это путь сеанса по умолчанию, установленный в php.ini. Обновлен вопрос, чтобы показать код, который устанавливает путь. –

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