ASP.NET È possibile mescolare Cookieless con i dati sulla sessione memorizzata dalla sessione di cookie?

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

Domanda

È possibile utilizzare sessioni di cookieless miste con sessioni di cookie?

Ho un'applicazione che ha acquisito i dettagli dell'utente e quindi reindirizza per il pagamento a una pagina SSL. Mi chiedevo se questo fosse possibile?

http://www.mydomain.com/confirm.aspx

reindirizza a

https://www.mydomain.com/(s(za1tw2l2k02jer4fiskzlovd))/payment.aspx

Nota: l'ID sessione in quest'ultimo URL.

Quindi, in sostanza, utilizziamo la sessione di cookie standard per la maggior parte dell'applicazione, ma quando trasferiamo in una pagina SSL passiamo la sessione all'URL HTTPS per prendere la sessione. L'ho provato a livello locale ma inizia una nuova sessione.

Mi manca un trucco?

Grazie

È stato utile?

Soluzione

Ho trovato una soluzione che sembra funzionare

Durante il trasferimento tra HTTP e HTTPS ho quanto segue:

Come puoi vedere, sto passando manualmente l'ID sessione alla pagina 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);

}

Al raggiungimento della pagina SSL, ASP.NET vede la richiesta come una nuova sessione, quindi utilizzo il metodo Start_Session in Global.asax per abbandonare la sessione appena creata e aggiungere un nuovo cookie di sessione con l'ID sessione trasmesso dalla stringa di query. Poiché l'Aqiresensessstate che popola la coppia di keyvalue della sessione è già stata eseguita da questo punto, devo reindirizzare la pagina a se stessa per ripopolare tali valori.

Sembra funzionare davvero bene :)

    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);
        }
    }

Inoltre, per quanto riguarda qualcuno che fa clic su un link esterno durante la navigazione della pagina SSL Acquista.Aspx che ho scritto seguendo in Global.asax per reindirizzare il traffico alle pagine SSL nessuno SSL se non è la pagina di pagamento.

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);
            }
        }
    }

Spero che qualcuno lo trovi utile, sono rimasto bloccato per un po 'cercando di trovare una bella soluzione.

La mia ispirazione è venuta da Questo URL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top