#asp.net #session-cookies #multiple-domains #website-deployment
#asp.net #сеансовые файлы cookie #multiple-domains #веб-сайт-развертывание
Вопрос:
Я хочу разделить cookie сеанса между доменами.
У меня более одного домена: —
1. mydomain.com
2. mydomain.fr
3. mydomain.de
4. mydomain.da
...and many other language based
Теперь у меня есть один веб-сайт, развернутый на сервере. Я хочу разделить сеанс между разными доменами на одном веб-сайте. Как мне этого добиться?
Я нашел в Интернете, <httpCookies domain=".mydomain.com" />
но это работает с поддоменами (такими как test.mydomain.com
и secure.mydomain.com
), но не для разных доменов.
Я тоже пытался <httpCookies domain=".mydomain." />
, но к этому сеансу перестал работать.
Кто-нибудь может мне помочь, пожалуйста?
Ответ №1:
Вы не можете обмениваться файлами cookie на доменах, которые имеют другое имя домена верхнего уровня.
Это возможно сделать только с поддоменами.
mydomain.com
fr.mydomain.com
de.mydomain.com
da.mydomain.com
...
Комментарии:
1. Да, это работает. Но есть ли какой-либо возможный способ разделить данные между несколькими доменами?
2. @Waqas — конечно, есть, используя обратные каналы (например, ту же базу данных).
Ответ №2:
Как указано в Oded, вы не можете совместно использовать файлы cookie в разных доменах верхнего уровня. Поэтому вам может потребоваться изучить другой метод сохранения сеансов.
Замена поставщика состояния сеанса, как предлагает danyolgiax, не решит вашу проблему, поскольку идентификация сеанса все еще происходит с помощью файлов cookie. Поэтому вам нужно изучить такой подход, как сеансы без приготовления:
Затем вы можете сохранить данные в базе данных или в сеансе InProc на сервере. Как только вы устраните зависимость от файлов cookie.
Редактировать
Кроме того, если вы выполняете какие-либо действия на стороне клиента, используя неавторизованный файл cookie, который абсолютно требует присутствия файлов cookie, вы бы записали их из каждого отдельного домена на основе этих сохраненных на сервере / сеансе значений. Таким образом, пользователь, переключающий домены, в конечном итоге получает ваш cookie для каждого домена.
Комментарии:
1. Сеанс без приготовления создает идентификатор сеанса внутри строки запроса, что невозможно в моем текущем проекте.
Ответ №3:
Вы не можете напрямую передавать файлы cookie между разными доменами. Но есть один способ сделать это возможным в некотором контексте. Вы можете сделать запрос JSONP или загрузить iframe в свой JS. если вы используете iframe, выполните http POST-вызов с помощью form. Тег формы содержит ваше другое доменное имя в качестве действия и имя iframe в качестве цели. Что будет делать форма, так это то, что она загрузит ifram’а, и файл cookie вашего другого домена появится в вашем браузере.
Код:
<iframe name="iframe-test" border="1px"></iframe>
<form id="iframe-form" target="iframe-test" action="http://differentdomain.com/setCookie" method="POST">
<input type="hidden" value="1234" name="token">
</form>
<script type="text/javascript">
function submitForm(){
var form = document.getElementById("iframe-form");
form.submit();
}
</script>
Ответ №4:
Если вы используете SQL Server, я думаю, вы можете использовать его в качестве поставщика состояния сеанса.
в web.config:
<sessionState
mode="SQLServer"
sqlConnectionString="data source=127.0.0.1;user id=<username>;password=<strongpassword>"
cookieless="false"
timeout="20"
/>
Вот некоторые документы:
Комментарии:
1. Да, можно использовать SQLServer, но проблема в том, где мне хранить SessionID?
2. Я думаю, вы можете использовать сеанс. Свойство SessionID.
3. Используя SessionState mode =»SQLServer», объект сеанса будет сохранен на SQLServer, и вы сможете разделить его между доменами.
4. но идентификатор сеанса является частью файла cookie .. sql server — это просто хранилище сеанса на сервере, но вам нужно получить его на основе идентификатора сеанса, отправленного с запросом. Так что это действительно не поможет.