Пользовательские сессии PHP становятся «запутанными» - PullRequest
2 голосов
/ 15 июня 2009

Приложение, с которым у меня возникают проблемы, является обычным веб-приложением ... ничего особенного в том, как оно обрабатывает пользователей. То есть я обрабатываю информацию пользователя в переменной сеанса, а сеанс управляется с помощью файла cookie.

У моего клиента возникла проблема, из-за которой пользователи вошли в систему, и время от времени им предоставлялась страница для другого пользователя (это легко определить, поскольку имя пользователя находится вверху каждой страницы) , Если они нажмут на ссылку «Домой», все снова будет хорошо, по-видимому.

Теперь, что касается моих знаний PHP, потребуются некоторые усилия, чтобы смешать подобные вещи, верно? Я не могу воспроизвести проблему ни в одной из наших сред разработки, и, насколько я понимаю, как я уже сказал, потребовалось бы некоторое усилие, чтобы на самом деле «поделиться» такого рода информацией о сеансе ...

Итак, мой вопрос таков: какие могут быть возможные проблемы? Каждый раз, когда я сталкивался с этим раньше, это происходило из-за «неправильного поведения» прокси-сервера, хотя они говорят мне, что не передают запросы.

Есть что-нибудь еще, что я могу пропустить? Любые другие возможные причины этого (естественно, это может включать проблему с моим кодом)?

Спасибо ...

Ответы [ 4 ]

2 голосов
/ 16 июня 2009

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

Оказывается, клиент использовал карманные компьютеры для доступа к приложению и разряжал батареи. Это конкретное устройство затем переустанавливало свои часы на 2005, когда батарея в конце концов была перезаряжена, и кажется, что это заставило браузер читать определенные страницы из своего кэша.

Как только часы на устройстве / устройствах были установлены правильно, проблема исчезла.

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

2 голосов
/ 15 июня 2009

Судя по звукам, хотя ваш клиент уверяет вас, что это не так, мне все равно кажется, что проблема с прокси или кешированием. Если это вообще возможно, вы можете добавить что-то вроде отметки времени, когда страница была сгенерирована где-то рядом с пользовательским полем, просто чтобы убедиться, что запрос актуален.

Таким образом, если страница испортилась, у вас есть какое-то указание на то, что страница была сгенерирована ранее и сохранена чем-то в пути. Если ваши результаты ajax кешируются браузером, а ваш клиент использует несколько человек в одном веб-браузере, ему не потребуется прокси-сервер для получения странных результатов.

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

Можете ли вы подтвердить, что, когда вы вошли в систему как пользователь А и «неправильно» разместили свой сеансовый файл cookie (удалите его), можете ли вы по-прежнему получать нужную информацию? Если это так, возможно, что-то не так с обработкой аутентификации.

Надеюсь, это поможет!

1 голос
/ 15 июня 2009

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

Конечно, вместо того, чтобы уничтожить его, вы можете просто инициировать новый сеанс для пользователя, если IP не совпадает. Я думаю как то так будет работать:

session_start();

if (isset($_SESSION['ip'])) {
    if ($_SESSION['ip'] != $_SERVER['REMOTE_ADDR']) {
        session_regenerate_id();
        session_destroy();
        session_start();
        $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
    }
} else {
    $_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
}
0 голосов
/ 15 июня 2009

Предоставляете ли вы пользователям ссылки, в которых есть идентификатор сеанса (или другие запросы, которые принимают идентификатор сеанса в качестве параметра)?

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