Как правильно обрабатывать постоянные ссылки, когда страница зависит от сеанса? - PullRequest
2 голосов
/ 28 ноября 2011

Вот ситуация: у меня есть приложение, где вы начинаете с экрана, показывающего список стран. Вы выбираете страну, и она становится той внешней страной, которую приложение использует, пока вы ее не измените. Эта окружающая страна хранится в сеансе, поэтому приложение не должно передавать CountryId в каждом URL. Но я также хочу поддерживать постоянные ссылки на контент, специфичный для страны, поэтому я предполагаю, что должна быть кнопка «Получить постоянную ссылку», которая создает постоянную ссылку, которая содержит , содержащую CountryId, поскольку она, очевидно, должна работать независимо от текущий сеанс.

Вот вопрос: я понимаю, что, поскольку выбор страны меняет состояние сеанса, делать это нужно только через POST. Но тогда, если пользователь входит через GET с постоянной ссылкой, содержащей, например, CountryId = 123, что должно произойти? Должна ли страница обновить сессию со страной 123? В этом случае будет нарушено правило, что вы можете изменить сеанс ТОЛЬКО через POST. Но если не не меняет сеанс, тогда весь код, который опирается на сеанс, не будет работать, и мне придется иметь избыточные для кода способы генерации страницы.

ИЛИ , должна ли страница иметь какой-то механизм для высказывания "используйте значение сеанса, но переопределите любое значение строки запроса, если оно есть (и не изменяйте сеанс вообще)?

ИЛИ , я неправильно понимаю правило POST?

1 Ответ

3 голосов
/ 29 ноября 2011

Настоящая проблема здесь заключается в том, что вы используете сессию.Вы не можете предоставить постоянные ссылки, потому что у данных, которые вы сохранили в сеансе, мог истечь срок действия, когда пользователь перейдет по этой ссылке позже.Поэтому вы должны каким-то образом сохранить эти данные в более надежном хранилище данных, когда кто-то попросит вас создать постоянную ссылку.Поэтому, когда пользователь запрашивает постоянную ссылку, вы продолжаете и сохраняете все те критерии поиска, которые использовались для поиска в вашем хранилище данных, и получаете уникальный идентификатор, который позволит вам получить их позже.Затем предоставьте пользователю следующую постоянную ссылку: /controller/search/id, где идентификатор представляет уникальный идентификатор, который позволит вам получить критерии из вашего хранилища данных, выполнить поиск и восстановить страницу, какой она была.

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