Экспресс-сессия + 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?
Спасибо
Ответы
Ответ 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/