Файлы cookie исчезают после перенаправления

Шаблоны должны использоваться в заголовках, потому что компилятор должен создавать экземпляры разных версий кода в зависимости от параметров, заданных / выведенных для параметров шаблона. Помните, что шаблон не представляет собой код напрямую, а шаблон для нескольких версий этого кода. Когда вы компилируете функцию non-template в файле .cpp, вы компилируете конкретную функцию / класс. Это не относится к шаблонам, которые могут быть созданы с использованием разных типов, а именно, если при замене параметров шаблона конкретными типами необходимо исправить конкретный код.

Была функция с ключевым словом export, которая была предназначенный для отдельной компиляции. Функция export устарела в C++11 и, AFAIK, только один компилятор реализовал ее. Вы не должны использовать export. Отдельная компиляция невозможна в C++ или C++11, но, возможно, в C++17, если понятия в нее входят, мы могли бы иметь некоторый способ отдельной компиляции.

Для отдельной компиляции, которая должна быть достигнута, разделить проверка шаблона тела должна быть возможна. Кажется, что решение возможно с концепциями. Взгляните на этот документ , недавно представленный на совещании по стандартам. Я думаю, что это не единственное требование, поскольку вам все равно необходимо создать код кода шаблона в коде пользователя.

Отдельная проблема компиляции для шаблонов, я думаю, это также проблема, возникающая при миграции на модули, которые в настоящее время работают.

5
задан Alon 23 January 2019 в 15:28
поделиться

3 ответа

Ваше описание происходящего выглядит неверным.

Это не (или, по крайней мере, не должно), что это происходит. Когда браузер запрашивает http://server.com/login и возвращает в ответ заголовок Set-Cookie, cookie устанавливается и ограничивается доменом server.com, даже если ответ редирект. Если вы видите файл cookie «auth», отправленный на client.com, то это файл cookie, который client.com был установлен ранее.

В любом случае, похоже, что вас действительно волнует, это

Существует множество причин, по которым это может происходить.

  • CORS . Вы упомянули, что это было включено CORS, но ради других, читающих это, у вас должны быть установлены следующие заголовки CORS на server.com
    • Access-Control-Allow-Origin: http://client.com
    • Access-Control-Allow-Credentials: true
    • [ 1146]
    • Обратите внимание, что вы не можете избежать использования подстановочного знака для Access-Control-Allow-Origin при отправке учетных данных. Также обратите внимание, что источник должен быть точным совпадением, включая схему (http или https). На практике обычно серверы читают заголовок Origin запроса, сверяют его с белым списком и, если это разрешено, копируют значение заголовка Origin из запроса в заголовок Access-Control-Allow-Origin в ответе. [тысяча сто тридцать одна]
    • Вы должны установить xhr.withCredentials = true в своем запросе XHR. (См. MDN для более подробной информации.)

    Затем, после того, как вы все это сделали, у вас на пути будет еще одно препятствие. Поскольку вы используете client.com и пытаетесь отправить файл cookie на server.com, файл cookie server.com считается «сторонним». AFAIK У всех основных браузеров есть настройка, которая блокирует сторонние куки для конфиденциальности, потому что они чаще всего используются трекерами для сбора маркетинговых данных для рекламы. Я считаю, что большинство из них по умолчанию блокируют сторонние куки, но я не уверен в этом. Наверняка многие люди установили в своих браузерах блокировку сторонних файлов cookie.

    Таким образом, вы должны сообщить своим посетителям, чтобы они настраивали свой браузер для разрешения сторонних файлов cookie из server.com.

    Кстати, небезопасно устанавливать cookie при перенаправлении в другой домен. Хотя это разрешено по спецификации AFAIK, возникли проблемы с поддержкой браузера. См., Например, эту ошибку Chrome .

0
ответ дан Old Pro 23 January 2019 в 15:28
поделиться

Из спецификации Access-Control-Allow-Origin: Для запросов без учетных данных в качестве подстановочного знака может быть указано буквальное значение «»; *

Попробуйте добавить определенный домен в Access-Control-Allow-Origin поле.

Я думаю, что вы должны использовать прокси в угловых приложениях. Для получения дополнительной информации проверьте эту ссылку: https://github.com/angular/angular-cli/blob/master/docs/documentation/stories/proxy.md

0
ответ дан tdev 23 January 2019 в 15:28
поделиться

Вы должны использовать опцию withCredentials при отправке вашего запроса ajax на ваш http://server.com , и ваш server.com должен иметь для Access-Control-Allow-Credentials значение true.

Example code in Node.JS server:

var cors = require('cors');
var corsOptions = {
    origin: '*',
    credentials: true };

app.use(cors(corsOptions));

Подробнее об этом здесь: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials

[ 111]

Подробнее об этом здесь: https://angular.io/api/http/RequestOptions

Также проверьте это : https : //github.com/angular/angular/issues/24283 - похоже, у определенной версии Angular были проблемы с этим флагом, поэтому, если вы не используете более свежую версию, вам может понадобиться установить заголовок явно.

Причина этого в том, что, если сервер явно не скажет клиенту «Я приму файлы cookie (установленные ранее в моем домене), переданные другим доменом» - принятие файлов cookie будет безопасным выпуск. Подробнее здесь: https://en.wikipedia.org/wiki/Cross-site_request_forgery

0
ответ дан Mavi Domates 23 January 2019 в 15:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: