Как вы можете сохранить сеанс через несколько поддоменов в c # mvc? - PullRequest
3 голосов
/ 24 февраля 2012

Приложение для корзины покупок, в котором я работаю с доменом jumps, когда оно переходит с обычной страницы на страницу отправки ваших данных.

Короче говоря, развернуто две копии приложения: один сервер для «основного» сайта и один сервер с сертификатом ev, работающим по https для информации о клиенте (включая оплату; это проблема соответствия PCI).

Мой вопрос такой:

При переходе с http://shop.domain -> https://secure.domain (и обратно, если пользователь просматривает назад), как я могу сохранить сеанс?

Пропускать файлы cookie через домен с помощью JSONP тривиально, но я понятия не имею, что делать с ними на удаленной стороне, чтобы «повторно подключиться» к сеансу.

Я читал разные вещи о развертывании вашего собственного провайдера сеансов и т. Д. И т. Д., Но я не нашел такого, который был бы больше, чем просто общий совет; конечно, нет примеров того, как это можно использовать для присоединения к сеансу.

Это для веб-приложения MVC3 c #.

Ответы [ 3 ]

8 голосов
/ 24 февраля 2012

Проблема с Session в том, что они находятся в одном домене.

Если у вас есть 2 приложения в субдоменах , вы всегда можете добавить это к своему web.config

<httpCookies domain=".domain.com"/>

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

Вы можете использовать для этого любую систему кэширования, где вместо добавления переменных в переменную сеанса вы добавляете их в кеш как пара ключ / значение , вы всегда можете использовать альтернативу NoSQL (множество бесплатных аккаунтов там, чтобы вы могли создавать прототипы и проверять концепцию, чтобы развернуть последние биты).

Memcached сервер всегда является хорошей альтернативой, и Couchbase в качестве версии сообщества доступна бесплатно.

Хитрость заключается в том, чтобы сделать это:

Cache.AddObject(key + "UserInfo-name", "Bruno Alexandre");

где key может быть значением строки запроса, добавляемым в global.asax после session_start

вместо этого

Session["UserInfo-name"] = "Bruno Alexandre";
0 голосов
/ 17 мая 2017

Я создаю сеанс пользователя с использованием HttpContext из функции.

HttpContext cu;
string username = cu.User.Identity.Name;
username = Guid.NewGuid().ToString();
cu.Session["username"] = username;
HttpCookie hc = new HttpCookie("username", username);
hc.Domain = ".yourdomain.com";
hc.Expires = DateTime.Now.AddDays(1d);
cu.Response.Cookies.Add(hc);

С помощью этого кода я могу совместно использовать сеанс в 3 поддоменах.

0 голосов
/ 06 февраля 2017

Когда вы создаете cookie, вы должны написать

Response.AppendCookie("Your cookie name");

Чтобы получить этот код что-то вроде

if (Request.Cookies["Your cookie name"] != null)
{
    string value = Request.Cookies["Your cookie name"].Value;
}

и, если есть разные решения, найдите

MachineKey которые должны быть такими же. Вы получаете это под

system.web в файле web.config

, а затем написать после machineKey

 <httpCookies domain=".yourdomainname.com" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...