HTTP не имеет состояния, поэтому, чтобы связать запрос с любым другим запросом, вам нужен способ хранения пользовательских данных между HTTP-запросами. Файлы cookie и параметры URL являются подходящими способами передачи данных между клиентом и сервером. Тем не менее, они оба читаемы на стороне клиента. Сессии решают именно эту проблему. Вы назначаете клиенту идентификатор, и он делает все дальнейшие запросы, используя этот идентификатор. Информация, связанная с клиентом, хранится на сервере, связанном с этим идентификатором.
Нам понадобится koa-сессия, поэтому установите его, используя —
npm install --save koa-session
Мы установим промежуточное программное обеспечение для коа-сессии . В этом примере мы будем использовать оперативную память для хранения сессий. Никогда не используйте это в производственных условиях. Промежуточное программное обеспечение сеанса обрабатывает все, то есть создает сеанс, устанавливает cookie сеанса и создает объект сеанса в объекте контекста.
Всякий раз, когда мы делаем запрос от того же клиента снова, мы будем хранить информацию об их сеансе у нас (учитывая, что сервер не был перезапущен). Мы можем добавить больше свойств к этому объекту сеанса. В следующем примере мы создадим счетчик просмотров для клиента.
var session = require('koa-session'); var koa = require('koa'); var app = koa(); app.keys = ['Shh, its a secret!']; app.use(session(app)); // Include the session middleware app.use(function *(){ var n = this.session.views || 0; this.session.views = ++n; if(n === 1) this.body = 'Welcome here for the first time!'; else this.body = "You've visited this page " + n + " times!"; }) app.listen(3000);
Приведенный выше код делает, когда пользователь посещает сайт, он создает новый сеанс для пользователя и назначает cookie. В следующий раз, когда пользователь заходит, cookie проверяется, и переменная сеанса page_view соответствующим образом обновляется.
Теперь, если вы запустите приложение и перейдете на localhost: 3000, вы получите следующий ответ.
Если вы вернетесь на страницу, счетчик страниц увеличится. В этом случае страница обновлялась 12 раз.