session_start () вообще не устанавливает $ _SESSION - PullRequest
0 голосов
/ 18 сентября 2010

У меня есть следующий идентичный код на моем сервере разработки и производства. Он работает в конце разработки, но не на стороне производства:

<?php
$s = session_start();
mail('me@example.com', 'Site-test', "s=$s; SESSION=".serialize($_SESSION), "MIME...");

Сервер разработки показывает:

s=1; SESSION=a:4:{s:20:"user_timezone_region";s:13:"Pacific/Samoa";s:4:"lang";s:1:"1";s:12:"sess_user_id";s:3:"225";s:14:"sess_user_type";s:1:"S";} 

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

s=1; SESSION=a:0:{} 

Что-то не так с моими настройками PHP на рабочем сервере, которые я надеюсь диагностировать. Да, это связано с моими двумя другими вопросами, недавно здесь и здесь .

Подробнее:

  • У меня работает cPanel на этом сервере
  • PHP error_log НЕ сообщал, что выше было ошибкой (обратите внимание, что переменная 's' равна '1')
  • Различия в phpinfo () для двух упомянуты в первой ссылке

Ответы [ 2 ]

1 голос
/ 18 сентября 2010

Сессия, когда она впервые запускается для нового клиента, фактически пуста.Это может означать, что на сервере dev вы видите сеанс возвращающегося клиента, а на продуктивном - сеанс клиента, впервые работающего с сервером.

0 голосов
/ 18 сентября 2010

Почему вы тестируете свою сессию таким странным образом? Почему бы не сделать такой простой скрипт

<? 
session_start(); 
if (!isset($_SESSION['counter'])) $_SESSION['counter']=0;
echo "Page reloaded ".$_SESSION['counter']++." times.<br>
<a href=".$_SERVER['PHP_SELF'].'?'.session_name().'='.session_id().">reload</a>"; 
?>

если это работает, ваши сеансы работают отлично, но с передачей идентификатора что-то не так.
Если нет ... должно быть какое-то сообщение об ошибке.

...