2013-09-05 2 views
0

Может кто-нибудь объяснить, если это правильное поведение с PHP, я ожидал, что session_start() вернет false и получит предупреждение о том, что имя session_name содержит недопустимые символы.session_start возвращает true, но не работает, когда имя_соединения содержит пробел

Код для воспроизведения:

<?php 
session_name('m m'); 
var_dump(session_start()); 

if(!isset($_SESSION['count'])) { 
    $_SESSION['count'] = 0; 
} 
else { 
    $_SESSION['count']++; 
} 

echo session_name(); 
echo $_SESSION['count']; 

Выполнить это один раз:

bool(true) m m0

перезагрузки страницы:

bool(true) m m0

Должно быть (если сессия работает):

bool(true) m m1

session_start() возвращает истину, которая указывает на сеанс уже начался. $_SESSION['count'] указывает, что это не работает. Предупреждение о недопустимых символах в имени сеанса отсутствует.

Я не могу найти никаких советов на странице руководства или определения действительных символов для сеанса.

+1

put 'var_dump (session_start());' сверху –

+1

Вы должны вызвать 'session_name()' перед 'session_start()'. –

ответ

5

PHP создает что-то вроде этого:

Set-Cookie: m+m=unttot9siteipcsrc0r064hn37; path=/ 

... и браузер (Firefox/23) посылает эту спину:

Cookie: m+m=unttot9siteipcsrc0r064hn37 

До сих пор так хорошо. Но затем PHP генерирует новый идентификатор сеанса:

Set-Cookie: m+m=7tmi7kd8n27ef3qdk5q706gk85; path=/ 

Это ошибка? Я бы сказал, что это не так your session name is clearly invalid:

Имя сессии ссылается на имя сеанса, который используется в печенье и URL (например, PHPSESSID). Он должен содержать только буквенно-цифровые символы; он должен быть коротким и описательным (то есть для пользователей с включенными предупреждениями cookie). Если задано имя, имя текущего сеанса изменяется на его значение.

Предупреждение

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

Если вы будете следовать правилам она работает, как ожидалось:

session_name('mxm'); 

Резюмируем:

  • Не раздумывайте, используйте консоль разработчика браузера и другие инструменты
  • Читать docs ;-)

Edit: Просто заметил, что вы говорите это:

Я не могу найти какие-либо намеки на странице руководства, ни определение о том, что это допустимые символы для сеанса.

Я нашел эту информацию прямо на странице руководства для session_name().

+0

Да. Я прочитал мануал, но, очевидно, недостаточно хорош ... спасибо. Я также ожидал предупреждения с указанием «недопустимых символов в имени session_name, используйте только [a-z09-]», но я этого не понял и не мог понять, почему. Во всяком случае, хороший ответ. –

+0

@MikaelRoos Было бы полезно узнать, успешно ли 'session_name()'. И еще более понятно, что PHP не будет нормально работать с недопустимым именем сеанса. Но это PHP, который мы все любим и ненавидим ;-) –

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