PHP сессия не сохраняется между страницами - PullRequest
2 голосов
/ 05 июля 2011

Я только что купил новое серверное пространство и переносю на него очень простое PHP-приложение, которое отлично работает на моем другом сервере.

По какой-то причине данные сеанса не сохраняются в переменной $ _SESSION между страницами на новом сервере.Я посмотрел эту похожую статью SO и многие другие, чтобы попытаться исправить проблему.

Я могу подтвердить, что:

  1. Сеанс работает нормальнона моем другом сайте.Я заглянул в каталог, определенный с помощью session.save_path, и там есть множество файлов сессий (на OLD-сервере).
  2. Я повторил содержимое переменной $ _SESSION в конце страницы,и он содержит правильные данные, он просто не сохраняется.
  3. У меня есть echo'd session_id () для каждой страницы и получаю одинаковый вывод.
  4. Я посмотрел впапка, указанная в папке session.save_path НОВОГО сервера (/ usr / lib / php / session), и там нет файлов.Я проверил права доступа и он установлен на drwxrwx ---, что должно означать, что программа php может писать в него, верно?
  5. У меня нет файла .htaccess.
  6. Я работаюCentOS 5.5

Это из соответствующей части вывода phpinfo ():

Session Support     enabled
Registered save handlers    files user
Registered serializer handlers  php php_binary wddx

Directive   Local Value Master Value
session.auto_start  Off Off
session.bug_compat_42   Off Off
session.bug_compat_warn On  On
session.cache_expire    180 180
session.cache_limiter   nocache nocache
session.cookie_domain   no value    no value
session.cookie_lifetime 0   0
session.cookie_path /   /
session.cookie_secure   Off Off
session.entropy_file    no value    no value
session.entropy_length  0   0
session.gc_divisor  1000    1000
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 5   5
session.hash_function   0   0
session.name    PHPSESSID   PHPSESSID
session.referer_check   no value    no value
session.save_handler    files   files
session.save_path   /var/lib/php/session    /var/lib/php/session
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    Off Off
session.use_trans_sid   0   0

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

Чтобы вы могли увидеть какой-то код, который не работает, я украл код из статьи, на которую я ссылался:

// info.php
<?
session_start();

$_SESSION['ID'] = "112233";
$_SESSION['token'] = "mytoken";

print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="info2.php">info 2</a>

, и один вызвал info2 с этимcode:

// info2.php
<?
session_start();

print $_SESSION['ID'];
print $_SESSION['token'];
?>
<a href="info.php">info</a>

В результате вы получаете данные массива в info.php, но не выводите информацию в info2.php (кроме ссылки, конечно).

Заранее большое спасибо за любыепомощь.

Ответы [ 2 ]

7 голосов
/ 05 июля 2011

Попробуйте явное закрытие сессии до завершения сценария;возможно, вы видите какое-то сообщение об ошибке.

<code><?php
error_reporting(E_ALL); ini_set('display_errors', true);
session_start();
echo '<a href="?', time(), '">refresh</a>', "\n";

echo '<pre>';
echo 'session id: ', session_id(), "\n";

$sessionfile = ini_get('session.save_path') . '/' . 'sess_'.session_id();
echo 'session file: ', $sessionfile, ' ';
if ( file_exists($sessionfile) ) {
    echo 'size: ', filesize($sessionfile), "\n";
    echo '# ', file_get_contents($sessionfile), ' #';
}
else {
    echo ' does not exist';
}

var_dump($_SESSION);
echo "
\ n "; $ _SESSION ['ID'] =" 112233 "; $ _SESSION ['token'] =" mytoken "; session_write_close (); echo 'done.';
1 голос
/ 22 августа 2012

Если ваш файл сеанса имеет нулевой размер, убедитесь, что на вашем сервере остается свободное место на диске. Это была моя проблема.

Проверьте дисковое пространство с помощью df -h на сервере Linux.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...