Session-cookies: странное поведение?Или я что-то здесь не понял? - PullRequest
0 голосов
/ 15 декабря 2011

Вот кусок кода:

session_name('somename');
session_start();
echo 'session name:'.session_name();

Вышеуказанное имя выводит имя сеанса как somename . Если я добавлю код ниже,

if(isset($_COOKIE['somename'])) {
 echo "<br/><br/>"."Cookie somename not yet set";
 }
else {
 echo "<br/><br/>".var_dump($_COOKIE['somename']);
 }

Выход всегда

Имя файла cookie еще не установлено.

Я использую функцию isset неправильно?

Если я просто добавлю это:

 echo "<br/><br/>".var_dump($_COOKIE['somename']);

Тогда вывод первый раз:

название сеанса: somename
Примечание: неопределенный индекс: somename в /path/to/file.php в строке 12 NULL

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

имя сеанса: somename
строка (26) "367jr029jj17mdu5fgkfgiv0u6"

Разве переменная cookie не должна быть установлена ​​ перед загрузкой содержимого страницы? или я не понял сессий / куки?

Ответы [ 2 ]

1 голос
/ 15 декабря 2011

Расширение на Ответ Яни Хартикайнен

isset() проверяет, установлен ли $_COOKIE['somename'].

Первый раз через до установки cookie:

// $_COOKIE['somename'] is NOT set so skip to else
if(isset($_COOKIE['somename'])) {
 echo "<br/><br/>"."Cookie somename not yet set";
 }
else {
 // $_COOKIE['somename'] is NOT set so you get an error.
 echo "<br/><br/>".var_dump($_COOKIE['somename']);
 }

Второй раз через после установки файлов cookie:

// $_COOKIE['somename'] is set so show message
if(isset($_COOKIE['somename'])) {
 echo "<br/><br/>"."Cookie somename not yet set";
 }
else {
 // $_COOKIE['somename'] is set so skip this part.
 echo "<br/><br/>".var_dump($_COOKIE['somename']);
 }

Более подходящее использование isset будет примерно таким:

if(isset($_COOKIE['somename'])) {
 echo "<br/><br/>".var_dump($_COOKIE['somename']);
 }
else {
  echo "<br/><br/>"."Cookie somename not yet set";
 }

В последнем примере я использую isset, чтобы определить, было ли установлено $_COOKIE['somename']. Если так, тогда я бросаю это; в противном случае я показываю сообщение & ldquo; Сценарий cookie еще не установлен & rdquo;

1 голос
/ 15 декабря 2011

Файлы cookie не устанавливаются в $_COOKIE, пока браузер не отправит их.

Это работает примерно так:

Запрос 1:

Your script starts
$_COOKIE is empty
session_start()
Your script ends
-> cookies to browser

Запрос 2:

<- browser sends cookies in request
Your script starts
$_COOKIE contains your cookie
...    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...