Я нашел решение, которое, кажется, работает
Когда перенося между HTTP и HTTPS я уже следующее:
Как вы можете видеть, я прохожу сеанс id вручную на страницу https.
protected void btnPurchase_Click(object sender, EventArgs e)
{
// Confirm puchase code **
string sslPaymentPath = string.Format("https://{0}/payment.aspx?sid={1}", Request.Url.DnsSafeHost, Session.SessionID);
Response.Redirect(sslPaymentPath);
}
Достигнув страницу Ssl, asp.net видит запрос как новый сеанс, поэтому я использую метод Start_Session в global.asax отказаться от вновь созданную сессии и добавить новые кук сессии с сессией id из строки запроса. Поскольку AquireSessionState, который заполняет пару keyValue сеанса, уже был запущен этой точкой, мне нужно перенаправить страницу назад к себе, чтобы повторно заполнить эти значения.
Это, кажется, работает очень хорошо :)
void Session_Start(object sender, EventArgs e)
{
bool isPaymentPage = (Request.Path.ToLower().IndexOf("payment.aspx") != -1);
// Code to load session over ssl. When changing between two sessions
if (isPaymentPage && Request.QueryString["sid"] != null && Request.IsSecureConnection)
{
string passedSessionId = Request.QueryString["sid"];
Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", passedSessionId));
Response.Redirect(Request.Url.LocalPath, true);
}
}
Также в отношении кого-то нажав на внешней ссылке во время просмотра страницы SSL purchase.aspx Я написал следующее в global.asax для перенаправления трафика вернуться к стандартным страницам ssl, если это не страница оплаты.
void Application_BeginRequest(object sender, EventArgs e)
{
bool isPaymentPage = (Request.Path.ToLower().IndexOf("payment.aspx") != -1);
// In the case someone has navigated away from the payment page redirect them back to the none secure protocol.
if (!isPaymentPage && Request.IsSecureConnection)
{
bool isAxdResource = (Request.Path.ToLower().IndexOf(".axd") != -1);
if (!isAxdResource)
{
string url = Request.Url.AbsoluteUri.ToLower().Replace("https://", "http://");
Response.Redirect(url,true);
}
}
}
Надеюсь, что кто-то посчитает это полезным, я застрял, пытаясь придумать хорошее решение.
Мое вдохновение исходило от this url.
Я не проводил никаких реальных испытаний, но разве это не делает тривиальным «захват» сеанса (проверка строки запроса)? Кроме того, был ли исходный вопрос о том, что раздел https находится в другом домене (что требует обходного пути)? – EdSF
Исходный вопрос связан с переключением сеанса между ssl и http, http и https обрабатывается отдельно сервером, поэтому браузер должен начать новый сеанс при переключении на ssl. Это просто работа, чтобы отыскать существующую сессию пользователей. Я думаю, вы могли бы захватить сеанс пользователей, но вам нужно будет получить идентификатор сеанса пользователей. У вас есть путь к риску/удобству. Сайт, на котором я использовал это, не требовал от пользователя входа в систему или предоставления какой-либо конфиденциальной информации, поэтому соображения безопасности были минимальными. – Mantisimo