Стремясь повысить производительность, я думал о том, чтобы попытаться исключить простой "cookie файл сеанса", но зашифровать всю информацию в самом cookie файле.
Очень простой пример:
userid= 12345
time=now()
signature = hmac('SHA1',userid + ":" + time, secret);
cookie = userid + ':' + time + ':' + signature;
Время будет использоваться для максимального срока годности, поэтому куки не будут жить вечно.
Теперь о большом вопросе: это плохая идея?
Мне лучше использовать AES256 вместо этого? В моем случае данные не являются конфиденциальными, но их нельзя изменять ни при каких обстоятельствах.
РЕДАКТИРОВАТЬ
После некоторой хорошей критики и комментариев я хотел бы добавить это:
- "Секрет" будет уникальным для каждого пользователя и непредсказуемым (случайная строка + идентификатор пользователя?)
- Срок действия файла cookie истекает автоматически (это делается на основе значения времени + определенное количество секунд).
- Если пользователь меняет свой пароль (или, возможно, даже выходит из системы?), Секрет должен измениться.
Последнее замечание: я пытаюсь найти решения для уменьшения нагрузки на базу данных. Это только одно из решений, которые я исследую, но это мое любимое решение. Основная причина в том, что мне не нужно искать другой механизм хранения, лучше подходящий для такого рода данных (memcache, nosql), и это делает веб-приложение немного более "не имеющим состояния".
10 лет спустя редактировать
JWT теперь вещь.