сравнение способов поддержать состояние

Большинство носителей хранения могут хранить типы string . Они не могут напрямую хранить структуру данных PHP, такую ​​как массив или объект, и они не должны, поскольку это будет связывать носитель данных с PHP.

Вместо этого serialize() позволяет вам хранить один этих структур как строка.

Если вы знакомы с json_encode() и json_decode() (и JSON в целом), концепция аналогична.

10
задан Adhip Gupta 18 September 2008 в 19:15
поделиться

8 ответов

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

  • Состояние строки запроса только полезно для самых основных задач - например, сохраняя позицию пользователя в мастере, возможно, или обеспечивая путь для перенаправления пользователя к тому, после того, как они выполнят данную задачу (например, входя в систему). Иначе состояние строки запроса является ужасно небезопасным, трудным реализовать, и для воздавания ему должное, оно должно быть связано с некоторым конечным автоматом серверной стороны, содержа ключ для связи клиента с сохраняемым состоянием сервера для того клиента.
  • Состояние cookie является более или менее тем же - это просто более необычно, чем состояние строки запроса. Но это все еще полностью сохраняется на стороне клиента, если данные в cookie не являются ключом для связи клиента с некоторым конечным автоматом серверной стороны.
  • Состояние метода формы снова подобно - это полезно для сокрытия полей, которые связывают данную форму с некоторым битом данных по бэкэнду (например, "этот пользователь редактирует рекордный № 512, таким образом, форма будет содержать скрытый вход со значением 512"). Это еще не полезно для очень, и снова, является просто другой реализацией той же идеи позади состояния cookie и строки запроса.
  • Состояние сеанса (любой из способов, которыми Вы описываете) является всем великим, так как они бесконечно расширяемы и могут обработать что-либо, что Ваш выбранный язык программирования может обработать. Первый протест состоит в том, что должен быть ключ в руке клиента для связи того клиента с ее состоянием, сохраненным на сервере; это - то, где большинство веб-платформ обеспечивает или основанное на cookie или запрашивает основанный на операция со строками ключ назад к клиенту. (Почти каждый современный использует cookie, но возвращается к строкам запроса, если куки не включены.) Второй протест состоит в том, что необходимо поместить некоторых, хотя в то, как Вы храните свое состояние..., Вы поместите его в базу данных? Ваша веб-платформа обрабатывает его полностью для Вас? Снова, самые современные веб-платформы вынимают работу из этого, и чтобы я пошел о реализации моего собственного конечного автомата, мне нужно очень серьезное основание... иначе, я, вероятно, создам дыры в системе безопасности и поломку функциональности, это долго обсуждалось со временем в любой из сформировавшихся платформ.

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

12
ответ дан 3 December 2019 в 18:37
поделиться

Безопасность является также проблемой; значения в строке запроса или полях формы могут быть тривиально изменены пользователем. Аутентификация пользователя должна быть сохранена или в зашифрованном или очевидном для трамбовки cookie или на сессии серверной стороны. Отслеживание значений передало в форме, поскольку пользователь завершает процесс, как регистрация сайта, ну, в общем, которая может, вероятно, быть сохранена в скрытых полях формы.

Хорошее (и иногда опасный) вещь, тем не менее, о строке запроса состоит в том, что состояние может быть взято любым, кто нажимает на ссылку. Как упомянуто выше, это опасно, если это дает пользователю некоторую авторизацию, они не должны иметь. Это хорошо, тем не менее, для показа Ваших друзей чего-то, что Вы нашли на сайте.

3
ответ дан 3 December 2019 в 18:37
поделиться

С увеличивающимся использованием Web 2.0 я думаю, что существует два важных метода, отсутствующие в Вашем списке:

8 приложений Ajax - начиная со страницы не перезагружают и нет никакой страницы для подкачки страниц навигации, состояние не является проблемой (но сохраняющиеся пользовательские данные должны использовать асинхронные вызовы XML).

9 Локальной персистентности - приложения На базе браузера могут сохранить свои пользовательские данные и указать библиотекам пользующегося локального жесткого диска, таким как Google Gears.

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

2
ответ дан 3 December 2019 в 18:37
поделиться

Лично, так как почти вся моя веб-разработка находится в PHP, я использую обработчики сессий PHP.

Сессии являются самыми гибкими, по моему опыту: они обычно быстрее, чем доступы дб, и cookie, которые они генерируют, умирают, когда браузер закрывается (по умолчанию).

1
ответ дан 3 December 2019 в 18:37
поделиться

Избегайте InProc, если Вы планируете разместить свой веб-сайт на хосте cheap-n-cheerful как webhost4life. Я научился на горьком опыте, что, потому что их системы по подписанному, они перерабатывают приложения очень часто, который заставляет Вашу сессию теряться.Очень раздражает.

Их предложение состоит в том, чтобы использовать StateServer, который прекрасен кроме Вас, должны сериализировать/десериализовать сессию eash сообщение назад. Я люблю объекты, и мое веб-приложение полно их. Я обеспокоен производительностью при переключении на StateServer. Я должен осуществить рефакторинг, чтобы только поместить материал, в котором я действительно нуждаюсь на сессии.

Желание я знал бы это, прежде чем я запустил...

С наилучшими пожеланиями, ограбьте.

1
ответ дан 3 December 2019 в 18:37
поделиться

Cookie со знаком, связанные со своего рода базой данных, хранят, когда необходимо захватить данные. Нет никакой причины хранить данные на стороне клиента, если у Вас есть связанный бэкенд; Вы просто ищете проблему, если это - общедоступный веб-сайт.

1
ответ дан 3 December 2019 в 18:37
поделиться

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

Решающим фактором обычно является время жизни данных. Состояние сеанса живет дольше, чем поля формы и так далее.

0
ответ дан 3 December 2019 в 18:37
поделиться

Будьте осторожны, что указывает, что Вы храните сторону клиента (строки запроса, поля формы, cookie). Что-либо связанное с безопасностью не должно быть сохранено клиентское, кроме, возможно, идентификатора сессии, если это обоснованно затенено и трудно предположить. Существует слишком много веб-сайтов, которые имеют настройки как "authenticated=true" и хранят настройки в cookie или строке запроса или скрытом поле формы. Это тривиально для пользователя для обхода чего-то как этот. Помните, что в ЛЮБОЙ вход, прибывающий от клиента, возможно, вмешались и нельзя доверять.

1
ответ дан 3 December 2019 в 18:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: