В каком веб-языке состояние приложения хранится не в сессии?
Помогите разобраться!
В PHP для хранения состояния нужно помещать в сессию данные об этом состоянии. Например, на странице можно нажать на кнопку. Но, по условию, на эту кнопку нельзя нажимать больше 10 раз. Чтобы запомнить, сколько раз кнопка была нажата конкретным хостом, нужно хранить в его браузере куки (или сессию, или localstorage, или в бд помещать, а в куках id записи в бд), но никак не в оперативную память сервера.
Есть ли языки для веба, которые это реализуют как-то проще? Я так понимаю, для каждого хоста нужен отдельный объект приложения? Короче, меня раздражает, что в PHP состояние нужно хранить где-то. Но я ничего не знаю о других языках. Объясните?
Для правильного вопроса надо знать половину ответа
Вариант первый - приложение состоит из скриптов, вызываемых при обращении пользователя (PHP). Очевидно, что между обращениями приложение не работает и данные о состоянии работы с пользователем ему где-то надо сохранять. Вот так и возникает необходимость сессий, а уж реализованы они могут быть как в виде файла на диске так и записью в базе данных.
Вариант второй - приложение реализовано в виде отдельного демона и постоянно находится в памяти. В этом случае появляется возможность держать данные сессии в оперативной памяти самого приложения, но как быть, если демон придётся перезапустить? Значит и в этом случае нужно предусмотреть сохранение данных сессии на диске.
Можно ещё каждый раз отдавать данные клиенту, чтобы он вернул их при следующем запросе, но при этом вы никак не сможете защититься от изменения этих данных клиентом в свою пользу.
trase8: такой вариант реализуется на любом языке. в том числе и на пыхе.
более того - это кагбе и не зависит от языка.
Rsa97 > но при этом вы никак не сможете защититься от изменения этих данных клиентом в свою пользу
защититься можно. только оверхед от перегонки данных туда-сюда этого не стоит.
DevMan: Защититься невозможно. Клиент может просто не вернуть данные, таким образом представившись как новый посетитель. Соответственно, все счётчики и лимиты начнут считаться заново. Хотя накопленные бонусы при этом тоже пропадут, польза от сброса лимитов может быть больше.
Rsa97: > Клиент может просто не вернуть данные, таким образом представившись как новый посетитель.
и чем это будет отличаться от удаления сессионной печеньки при server-side сессиях?
Ставьте Redis и храните на здоровье в оперативке (есть настройка "не сохранять на диск": данные будут только в оперативке).
Пример под Win: здесь.
Пример под *nix: здесь
Что такое Redis и сферы применения: здесь
Дело не в языках.
А в стандарте HTTP, который stateless.
То есть хранить приходится состояние в явном виде.
От языка сие не зависит.
Можешь хранить в cookie в браузере,
можешь хранить в http header или в http url,
можешь хранить в браузерном local storage,
можешь в базе данных или в оперативной памяти на сервере, во вспомогательном сервисе на сервере (не в вашем движке, а например в Tarantool), связывая эти записи с браузером через cookie, header или url).
Дело не в языке PHP или другом языке.
Во всех языка - те же варианты.