2011-01-04 1 views
0

Я использую symfony 1.4, и кажется, что каждый раз, когда пользователь аутентифицируется, symfony воссоздает сеанс для пользователя. Например, если я посещаю сайт и не вошел в систему, у меня есть другой идентификатор сеанса, тогда, если я вхожу в систему, у меня есть новый, то, когда я выхожу из системы, у меня есть еще один новый. Это было не так в symfony 1.0, и мне интересно, так ли это должно быть?Symfony 1.4 повторное создание сеансов/sessionid при изменении аутентификации

ответ

1

Я только что проверил исходный код 1.0, его там не было.
Версии 1.1 и выше восстанавливают идентификатор сеанса каждый раз при изменении аутентификации или добавляются/удаляются учетные данные.
Это очень хорошая мера безопасности, предотвращающая атаки фиксации сеанса.

Here's a link в соответствующий набор изменений в trac.

+0

Большое спасибо за информацию. Я пытаюсь реализовать функцию «кто в сети» на сайте, используя сеансы базы данных, и не уверен, как это сделать сейчас, когда так много сеансов с истекшим сроком действия. – BugBusterX

+0

Вы можете попробовать подклассифицировать sfSessionStorage, чтобы как-то отметить текущий сеанс в функции регенерации() , затем скажите symfony на фабриках.yml, чтобы использовать свой класс. – Maerlyn

+0

Я просто решил установить идентификатор пользователя в сеансе db вручную во время входа в систему и отключить его во время выхода из системы – BugBusterX

0

Это правильное поведение. Это скорее связано с сеансами PHP, чем с ними справляется symfony. Я не думаю, что в symfony 1.0 было иначе.

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

+0

Я имею в виду, что он меняет его каждый раз, когда происходит аутентификация, поэтому, если вы заходите на сайт, заходите в систему и выходите из системы сразу же, у вас уже есть 3 разных идентификатора сеанса. Сначала создается при первом посещении сайта и остается неизменным до тех пор, пока вы не войдете в систему. Когда вы входите в новый идентификатор сеанса, и пока вы остаетесь в системе, он остается таким же. Когда вы выходите из системы, он назначает еще один. В Symfony 1.0 это было не так. – BugBusterX

+0

В этом случае вы можете быть прав насчет symfony 1.0. Во всяком случае, он существует в 1.4 по соображениям безопасности. Приятно прочитать о фиксации сеанса (и безопасности сеанса в целом): http://phpsec.org/projects/guide/4.html –