2009-05-27 2 views
6

Я здесь не в порядке. У меня есть определенная группа пользователей наверху, чьи сессии, похоже, истекают совершенно случайно. Дело не только в том, что они покидают сайт сидя на некоторое время, он может истекать, когда они просматривают. Для меня и большинства наших пользователей все работает отлично. Это не проблема с браузером, у нас есть люди из FF и всех версий IE, которые работают нормально, а люди в FF и IE не работают.Неожиданно истекают сессии PHP

Мой gc_maxlifetime находится в 43200, а сбор мусора - сумасшедший низкий 1/1000 (не то, что должно иметь значение). Возможно ли, что на сервере есть что-то еще, которое случайно удаляет некоторые из наших сеансов? Что я должен проверить? Это все еще не объясняет, почему затрагивается только эта конкретная группа.

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

session.gc_maxlifetime = 43200 
session.gc_divisor = 1000 
session.save_path = /var/lib/php/session 
session.use_only_cookies = Off 
session.bug_compat_42 = Off 

Первые три я не беспокоюсь об этом, но может последние два быть причиной такого поведения? Я на самом деле никогда не отправляю файлы cookie через URL-адрес, поэтому у меня нет веских причин отключить use_only_cookies. У меня нет никаких гарантий того, что неудачники, которые сделали это приложение до того, как я сюда попал, не использовали вещь bug_compat_42 для установки переменных сеанса, но опять же, я ожидал бы, что проблема с этим будет менее случайной.

Edit:

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

+0

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

+0

Я решил, что это не удаление сеанса. Как я могу проверить, истекает ли файл cookie? –

ответ

5

Проблема заключается в том, что их браузер установил, что файл cookie сеанса истекает преждевременно. Я решил проблему с этим грязным грязным хаком, который никогда не должен использовать.Я не горжусь этим, но если это блестит некоторый свет на что-нибудь не стесняйтесь, дайте мне:

if (!headers_sent()) { 
    if ($_COOKIE["PHPSESSID"] != "") { 
     setcookie("PHPSESSID", $_COOKIE["PHPSESSID"], time()+43200, "/", ".mydomain.com"); 
    } 
} 
+0

Знаете ли вы, какие браузеры были затронуты этой проблемой, мы видим что-то подобное с некоторыми пользователями, использующими только т. 0. – Cliffordlife

+0

Очень похожий код является наиболее популярным примечанием для session_set_cookie_params на сайте php. Кажется, что-то вам нужно сделать, чтобы заставить вещи работать правильно. http://www.php.net/manual/en/function.session-set-cookie-params.php#100657 –

+0

У меня была такая же проблема, как и на платном хостинге. Я не мог понять, что может привести к преждевременному истечению, поэтому я сделал это аналогично вашему пути. Благодарю. – HelpNeeder

1

Не могли бы вы предоставить немного больше информации о вашей настройке?

Моя первая мысль заключалась в том, что есть что-то случайное удаление вашей папки временных файлов. Если вы используете стандартную настройку LAMP, PHP будет хранить файлы данных сеанса в/tmp. Если они будут удалены оттуда путем очистки, вы потеряете свои сеансы.

Редактировать: Я передумал это сейчас. Если затронута только определенная группа пользователей, это делает ее гораздо менее вероятной.

Как насчет настроек файлов cookie? Я бы удостоверился, что эти люди не используют что-то вроде динамического прокси, и что ваши файлы cookie устанавливаются для корневого домена вашего сайта. Возможно ли, что у них может быть какое-то программное обеспечение для очистки конфиденциальности, такое как CCleaner, настроенное как запланированное задание, которое может удалить их файлы cookie?

Я встал на одном из своих компьютеров и выбросил Firebug на одну из машин Firefox и проверил HTTP-запросы, чтобы проверить, правильно ли отправлены файлы cookie.

+0

Как я уже сказал, я рассмотрел этот вариант, но я не думаю, что это приведет к поведению, которое я получаю. Если что-то убирает сеансы, я ожидаю, что все будут одновременно выходить из системы. Вместо этого у меня есть только небольшая группа людей, которые случайно выходят из системы. Дополнительная информация о настройке была бы полезной. –

+0

Вы можете проверить все настройки сеанса. Список можно найти по адресу http://ca2.php.net/manual/en/session.configuration.php. – zombat

1

Я бы установил некоторый http-сниффер, например httpwatch (оплачиваемый, но стоит каждый пенни) или fiddler (бесплатно) на этих машинах, и посмотреть, что происходит с кукисами сеанса (я думаю, что это PHPSESSID, но не уверен). Если cookie удаляется или изменяется в середине сеанса из-за прокси, странной конфигурации apache или чего-то еще, это лучший способ ее обнаружить.

1

Я знаю, что это поздно. Но только для тех, у кого такая же проблема.

[Если вы шифровать и дешифровать данные]

Я столкнулся с этой проблемой, и взял меня некоторое время, чтобы выяснить, в чем проблема. Он продолжает создавать новый идентификатор сеанса для одного и того же пользователя. Оказывает, что данные шифрования и дешифрованные данные не совпадают. Дешифрованные данные возвращаются с дополнительными пробелами. Попробуйте проверить значение своих данных при отправке и возврате из базы данных или любого другого хранилища, которое вы используете.

0

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

https://github.com/ezimuel/PHP-Secure-Session/blob/master/SecureSession.php

Прежде всего я хочу тонный знать, какова цель этой библиотеки, мы можем, чтобы эти настройки из php.ini, а также.

KEY _... новое созданное, что является использованием этого КЛЮЧА.

Когда я использую print_r внутри открытой(), я получаю ниже результата образца

Hqx_SecureSession Object 
(
    [_debug:Hqx_SecureSession:private] => 
    [_key:protected] => 5ò™6žÝ°rIÐß'k Êii07ÀtCzª[email protected]ü¸"‡ÄCžA¼ÿ£g{IP 
    [_path:protected] => c:\hqp\xampp_1.7.4\tmp\ 
    [_name:protected] => PHPSESSID 
    [_ivSize:protected] => 16 
    [_keyName:protected] => KEY_PHPSESSID 
    [_cookieParams:protected] => Array 
     (
      [lifetime] => 7200 
      [path] =>/
      [domain] => dev.autoquotes.insurance.com 
      [secure] => 
      [httponly] => 1 
     ) 

    [_sessionId:protected] => 
    [_logger:Hqx_SecureSession:private] => 
) 
htq827r4rjh9ob05nhlqb8vmd5ai52djb0bd0l42vk9un26df541c:\hqp\xampp_1.7.4\tmp 
Смежные вопросы