ASP.NET Können Sie Cookieless mit gespeicherten Sitzungsdaten für Cookie -Sitzungen mischen?
-
27-10-2019 - |
Frage
Ist es möglich, gemischte Cookieless -Sitzungen mit Cookie -Sitzungen zu verwenden?
Ich habe eine Anwendung, die Benutzerdetails erfasst und dann für die Zahlung an eine SSL -Seite umgeleitet wird. Ich habe mich gefragt, ob dies möglich ist.
http://www.mydomain.com/confirm.aspx
leitet zu
https://www.mydomain.com/(s(za1tw2l2K02Jer4fiskzlovd))/Payment.aspx
Hinweis: Die Sitzungs -ID in der letzteren URL.
Im Wesentlichen verwenden wir die Standard -Cookie -Sitzung für den größten Teil der Anwendung, aber wenn wir auf eine SSL -Seite übertragen, übergeben wir die Sitzung an die HTTPS -URL, um die Sitzung abzuholen. Ich habe es vor Ort ausprobiert, aber es beginnt eine neue Sitzung.
Vermisse ich einen Trick?
Vielen Dank
Lösung
Ich habe eine Lösung gefunden, die zu funktionieren scheint
Beim Übergang zwischen HTTP und HTTPS habe ich Folgendes:
Wie Sie sehen, über werde ich die Sitzungs -ID manuell an die HTTPS -Seite weitergeben.
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);
}
Nach Erreichen der SSL -Seite sieht ASP.NET die Anforderung als neue Sitzung, sodass ich die Start_Session -Methode im global.asax verwende, um die neu erstellte Sitzung aufzugeben und ein neues Sitzungs -Cookie mit der Sitzungs -ID aus der Abfragebarstellung hinzugefügt. Da das AquiresSessionState, das das Session -KeyValue -Paar bevölkert, bis zu diesem Punkt bereits ausgeführt wurde, muss ich die Seite wieder auf sich selbst umleiten, um diese Werte neu zu bevölkern.
Es scheint wirklich gut zu funktionieren :)
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);
}
}
Auch in Bezug auf jemanden, der auf einen externen Link klickt, während ich auf der SSL -Kauf -Seite stöbere.
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);
}
}
}
Ich hoffe, jemand findet das nützlich, ich war eine Weile festgefahren, um eine schöne Lösung zu finden.
Meine Inspiration kam von Diese URL.