Подтвердить что ты не робот

Экспресс-сессия + Angular: не удается получить доступ к файлу cookie connect.sid

Здесь я действительно не понимаю:

У меня есть экспресс на сервере, с инициализацией сеанса.

app.use(express.session({
    secret: 'mySecret'
    })
}));

Как упоминалось в этой статье Замешательство над идентификаторами сеанса с помощью Connect, он отправляет файл cookie connect.sid в любой запрос.

На стороне клиента я хочу прочитать содержимое этого файла cookie, и это кажется невозможным:

angular.module('myApp.controllers', ['ngCookies','myApp.services'])
.controller('homeCtrl', function($scope, $cookies) {
    $cookies['test']='myValue';
    console.log($cookies);
});

Когда я запускаю это, я получаю этот объект в журнале: Object {test: "myValue"}, тогда как если я перейду на вкладку ressources в отладчике Chrome, я увижу оба файла cookie:

Screenshot of Ressources tab in chrome debugger

Что я делаю неправильно?

Невозможно ли получить доступ к серверным файлам cookie из angular?

Спасибо

4b9b3361

Ответ 1

По умолчанию connect session использует httpOnly cookie (здесь).

Чтение файла cookie всегда запрещено, когда установлен флаг httpOnly.

Попробуйте отключить флаг httpOnly:

app.use(express.session({
    secret: 'mySecret',
    cookie: { httpOnly: false }
}));

Ответ 2

Будьте осторожны, чтобы вы не исправляли одну проблему, а создавали другую и худшую проблему. Флаг httpOnly обычно используется для защиты от атак XSS. См. Эту ссылку в OWASP для более подробной информации: https://www.owasp.org/index.php/HttpOnly

Интересная история об этом здесь: http://blog.codinghorror.com/protecting-your-cookies-httponly/