asp.net вы можете смешивать cookieless с данными сеанса, сохраненными в cookie?
Можно ли использовать смешанные сеансы без файлов cookie с сеансами файлов cookie?
У меня есть приложение, которое захватывает данные пользователя, а затем перенаправляет для оплаты на страницу ssl. Мне было интересно, если это возможно?
http://www.mydomain.com/confirm.aspx
перенаправляет на
https://www.mydomain.com/(S(za1tw2l2k02jer4fiskzlovd))/payment.aspx
Примечание: идентификатор сессии в последнем URL.
Итак, по сути, мы используем стандартный сеанс cookie для большинства приложений, но когда мы переносим на страницу ssl, мы передаем SessionId в URL-адрес https, чтобы забрать сеанс. Я попробовал это локально, но начинается новый сеанс.
Я пропускаю трюк?
Спасибо
1 ответ
Я нашел решение, которое, кажется, работает
При переводе между http и https я имею следующее:
Как видите, я передаю идентификатор сессии вручную на страницу 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, чтобы отказаться от вновь созданного сеанса и добавить новый файл cookie сеанса с идентификатором сеанса, переданным из строки запроса. Поскольку 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);
}
}
}
Надеюсь, кто-нибудь найдет это полезным, я застрял на некоторое время, пытаясь найти хорошее решение.
Мое вдохновение пришло от этого URL.