@trase8

В каком веб-языке состояние приложения хранится не в сессии?

Помогите разобраться!
В PHP для хранения состояния нужно помещать в сессию данные об этом состоянии. Например, на странице можно нажать на кнопку. Но, по условию, на эту кнопку нельзя нажимать больше 10 раз. Чтобы запомнить, сколько раз кнопка была нажата конкретным хостом, нужно хранить в его браузере куки (или сессию, или localstorage, или в бд помещать, а в куках id записи в бд), но никак не в оперативную память сервера.

Есть ли языки для веба, которые это реализуют как-то проще? Я так понимаю, для каждого хоста нужен отдельный объект приложения?
Короче, меня раздражает, что в PHP состояние нужно хранить где-то. Но я ничего не знаю о других языках. Объясните?
  • Вопрос задан
  • 181 просмотр
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вариант первый - приложение состоит из скриптов, вызываемых при обращении пользователя (PHP). Очевидно, что между обращениями приложение не работает и данные о состоянии работы с пользователем ему где-то надо сохранять. Вот так и возникает необходимость сессий, а уж реализованы они могут быть как в виде файла на диске так и записью в базе данных.
Вариант второй - приложение реализовано в виде отдельного демона и постоянно находится в памяти. В этом случае появляется возможность держать данные сессии в оперативной памяти самого приложения, но как быть, если демон придётся перезапустить? Значит и в этом случае нужно предусмотреть сохранение данных сессии на диске.
Можно ещё каждый раз отдавать данные клиенту, чтобы он вернул их при следующем запросе, но при этом вы никак не сможете защититься от изменения этих данных клиентом в свою пользу.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Ставьте Redis и храните на здоровье в оперативке (есть настройка "не сохранять на диск": данные будут только в оперативке).
Пример под Win: здесь.
Пример под *nix: здесь
Что такое Redis и сферы применения: здесь
Ответ написан
@murlogen
Дело не в языках.
А в стандарте HTTP, который stateless.
То есть хранить приходится состояние в явном виде.

От языка сие не зависит.

Можешь хранить в cookie в браузере,
можешь хранить в http header или в http url,
можешь хранить в браузерном local storage,
можешь в базе данных или в оперативной памяти на сервере, во вспомогательном сервисе на сервере (не в вашем движке, а например в Tarantool), связывая эти записи с браузером через cookie, header или url).

Дело не в языке PHP или другом языке.
Во всех языка - те же варианты.

Это стандарт http, Карл.
Это стандарт http.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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