2011-03-30 6 views
1

Новым для сеансов и просто интересно, возможно ли, что если (в нашем случае) обрабатываются два заказа одновременно, переменные сеанса могут запутаться.PHP безопасный сеанс по уникальному идентификатору

Например, если пользователь 1 делает бронирование, информация остается в сеансах во время входа в систему. Между тем другой пользователь делает заказ, который уже вошел в систему. Есть ли у них шанс, что сеансы могут запутаться.

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

И если да, то как это сделать.

Большое спасибо,

+0

Я не уверен, но я думаю, что сервер заботится о сеансах, поэтому нет возможности путать этот сервер с сервером. Тем не менее, я также хотел бы знать, если это не так. – Wh1T3h4Ck5

+1

Вы имеете в виду двух пользователей на одном компьютере? Если они находятся в другом браузере, тогда им не будет помешано, но невозможно иметь двух пользователей в одном браузере, если вы не закодируете свой собственный путь. – Flipper

ответ

3

Я считаю, что UID (что PHP назначает в качестве идентификатора сеанса) случайным образом генерируется от времени сервера, поэтому ответ нет. Ни одному из двух человек не будет присвоен тот же UID.

+0

Это не потому, что случайно, что это не будет одинаково. Но есть тест, чтобы предотвратить дублирование (т. Е. Во втором поколении, если сгенерированный идентификатор существует, то он пытается снова, пока не будет создан уникальный идентификатор.) –

0

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

Пока идентификаторы сеанса уникальны, и пользователь не обнаруживает идентификатор сеанса другого пользователя, тогда нет путаницы для путаницы.

0

Идентификаторы сеанса - это, по сути, просто случайные числа. Это HIGHLY маловероятно, но не невозможно, чтобы два или более пользователя получили один и тот же идентификатор сеанса.

PHP делает (я считаю) проверить, существует ли еще одна сессия, в которой используется идентификатор, который только что сгенерирован. Если есть столкновение, оно просто сгенерирует еще один, и продолжайте пытаться, пока не появится что-то «уникальное». Тем не менее, это не мешает случай, когда:

  1. пользователь А получает идентификационный номер сессии «X»
  2. пользователя А уходит на некоторое время и сессию «X» получает истекло
  3. пользователя B показывает вверх, и сервер снова генерирует идентификатор сеанса «X» случайным образом.
  4. пользователь A возвращается с исходным идентификатором файла cookie X и получает сеанс пользователя B.

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

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

+0

На третьем этапе вашего примера: у меня создалось впечатление, что эпоха для генерации случайного числа использовалось время. Если это так, то третьего шага действительно не может случиться. Поставьте меня на место, сэр. :) –

+0

PHP не проверяет. достаточно случайности для предотвращения столкновений. –

+0

@k: Текущее время является одним из факторов, но это не единственный фактор. Если бы это была только временная метка unix, то любые посетители в пределах того же «второго» получат одинаковый идентификатор. –

0

Просто для того, чтобы расширить ответ Марка.

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

Таким образом, на практике ответ NO.Вы можете положиться на большие числа, как все остальные

Смежные вопросы