Сессия работает нормально на сервере, но не поддерживается - PullRequest
0 голосов
/ 16 декабря 2011

Я использую PHP для создания веб-сайта для 3-х типов пользователей: Head, Main, Normal. Итак, я создал страницу для входа в систему, которая проверит учетные данные и переместит сессии в соответствующую папку. У меня есть структура, как

main //folder
head //folder
normal //folder
index.php

этот index.php проверит тип пользователя и перейдет на страницу индекса соответствующей папки.

На localhost работает нормально. Но на сервере он правильно перенаправляет в папку, но там сеансы пусты, поэтому появляется пустая страница.

я сделал

DEFINE('COOKIE_BASE_DOMAIN_NAME', '.domain.com');
ini_set('session.cookie_domain', COOKIE_BASE_DOMAIN_NAME);
session_start();

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

session
Session Support     enabled
Registered save handlers    files user sqlite
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_httponly Off Off
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  100 100
session.gc_maxlifetime  1440    1440
session.gc_probability  1   1
session.hash_bits_per_character 4   4
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/php_sessions   /var/php_sessions
session.serialize_handler   php php
session.use_cookies On  On
session.use_only_cookies    Off Off
session.use_trans_sid   1   1

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

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Похоже, что куки не работают должным образом (или заблокированы или что-то в этом роде). Если файлы cookie не работают, PHP добавит идентификатор сеанса в конец URL-адреса в строке запроса (как PHPSESSID).

Если вы перенаправляете с помощью header (), идентификатор сеанса не будет добавлен автоматически, а идентификатор сеанса потерян.

Не могли бы вы попробовать это:

header("Location: folder/index.php?" . SID);
exit();
0 голосов
/ 16 декабря 2011

Вы можете проверить каталог / var / php_sessions ... если разрешения в порядке и файлы там созданы.

Кроме этого, просто начните новый сеанс, если его нет, и отключите тайм-аут для файлов cookie (добраузер отключается):

if(!$_SESSION){
   session_set_cookie_params(0);
   session_start();
}

ОТЛАДКА:

В целях отладки полезно изменить путь к чему-то доступному, например:

ini_set('session.save_path','/home/someuser/public_html/sessions/');

В продуктивной средев любом случае он должен выходить за пределы веб-корня, просто см. комментарий ниже.

Если все не помогает, попробуйте что-то подобное на последующих страницах (в вашем phpinfo отсутствует соответствующая информация, так что это всего лишь предположение):

$_SESSION[SID]['page']

СОВЕТ:

Вызовите session_destroy () или удалите файл cookie PHPSESSID в своем браузере, когда вы что-то изменили ...

...