Одно приложение, разные домены: как сохранить сессии на ASP.NET? - PullRequest
1 голос
/ 18 марта 2010

У меня есть приложение с разными разделами. Каждый раздел доступен через домен. Пример: www.section1.com, www.section2.com, www.section3.com. Мне нужно сохранить сеанс, когда пользователь переходит с одного URL на другой. Приложение то же самое в IIS. Как это сделать?

Ответы [ 5 ]

2 голосов
/ 18 марта 2010

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

Обычный обходной путь - встроить ссылку на изображение в другие домены, которые обслуживаются страницей asp.net (или HttpHandler, если хотите). Эта страница должна содержать строку запроса с уникальным токеном и хешированной версией этих данных, дополненной некоторым общим секретом. Затем на этой странице будет установлен файл cookie для ответа, соответствующего этому домену, чтобы связать себя с соответствующими данными. Обычно ответом будет прозрачное изображение 1x1. Обычно вы хотите сделать это только при входе на один из сайтов.

2 голосов
/ 18 марта 2010

Вам потребуется передать cookie-файл сеанса и заново установить этот cookie в новом домене. Это сделает сеанс живым на нескольких доменах (при условии, что вы используете одно и то же приложение).

Пример:

Ссылка с section1.com:

затем OnSessionStart (или OnRequestStart) проверяют параметры запроса и присоединяют к нему сеанс. Это означает, что вручную установите cookie ASP.NET_SESSIONID на значение, которое вы передаете.

Это имеет серьезные последствия для безопасности, поэтому не допускайте этого, если не знаете, что делаете. другое решение может заключаться в том, чтобы сохранить что-либо в общем бэкэнде (базе данных?) и передать пользователю токен, который представляет собой реальный сеанс (и установить cookie на основе этого токена), который вы генерируете на средней странице при переходе из section1.com -> Transferusertonewdomain.aspx -> section2.com/?token=randomTokenThatMatchSessionInDatabase

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

0 голосов
/ 18 марта 2010

Вы должны начать с изменения sessionState с «InProc» на StateServer или SqlServer, убедиться, что MachineKeys одинаковы для всех сайтов (доменов и серверов), а затем настроить соответствующие серверные системы захватить информацию о состоянии.

Более подробную информацию можно найти на:

Режимы состояния сеанса

Обзор управления состоянием ASP.NET

0 голосов
/ 18 марта 2010

Если вы не выполните некоторые настройки, сеанс будет зависеть от приложения независимо от используемого вами режима сеанса. Вот статья , в которой рассказывается, как настроить сеанс SQL, чтобы вы могли использовать сеанс в нескольких приложениях.

0 голосов
/ 18 марта 2010

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

** РЕДАКТИРОВАТЬ

Есть еще один вопрос переполнения стека, посмотрите, поможет ли он, 315132

Это в основном спрашивает

Мне нужно поделиться информацией о едином входе между двумя разными доменами с cookie, это можно сделать в PHP и как?

ответ был

На обоих доменах разместите изображение или другой веб-элемент, который извлекается из другой домен. Используйте URL для уведомить другой домен, что пользователь X на домене A, и пусть домен B связать этот идентификатор пользователя с этим пользователем в их системе.

Это немного сложно выполнить правильно, но если вы думаете об этом это сработает очень хорошо.

Винко указывает в комментарии (спасибо!), что я не должен принимать это за при условии, что вы понимаете риски безопасности Если это информация представляет для кого-либо ценность, тогда вы должны убедиться, что вы используете правильное шифрование, аутентификация и т. д. чтобы избежать освобождения чувствительных информация и избегать различных атаки (повтор, человек посередине, так далее). Это не должно быть слишком обременительным так как вы контролируете как веб-сайты, так и Вы можете выбрать безопасный секретный ключ для оба, так как общение только происходит между двумя серверами через это специальный URL. Имейте это в виду, хотя.

Пользователь Адам Дэвис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...