ASP.NET Können Sie Cookieless mit gespeicherten Sitzungsdaten für Cookie -Sitzungen mischen?

StackOverflow https://stackoverflow.com/questions/5364821

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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top