Pregunta

¿Es posible usar sesiones mixtas de Cookieles con sesiones de galletas?

Tengo una aplicación que capturó los detalles del usuario y luego redirige el pago a una página SSL. Me preguntaba si esto es posible.

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

redirige a

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

Nota: La ID de sesión en la última URL.

Entonces, en esencia, utilizamos la sesión de cookies estándar para la mayoría de la aplicación, pero cuando transferimos a una página SSL pasamos el SessionID a la URL HTTPS para recoger la sesión. He probado esto localmente pero comienza una nueva sesión.

¿Me estoy perdiendo un truco?

Gracias

¿Fue útil?

Solución

He encontrado una solución que parece funcionar

Al transferir entre http y https tengo lo siguiente:

Como puede ver, estoy pasando la identificación de la sesión manualmente a la página 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 llegar a la página SSL, ASP.NET ve la solicitud como una nueva sesión, por lo que utilizo el método Start_Session en Global.asax para abandonar la sesión recién creada y agregar una nueva cookie de sesión con la ID de sesión aprobada desde la cadena de consulta. Debido a que el AquiresessionState que poca el par de KeyValue de sesión ya se ha ejecutado en este punto, necesito redirigir la página de nuevo para repoblar esos valores.

Parece funcionar muy bien :)

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

También con respecto a alguien que hace clic en un enlace externo mientras navega por la página SSL compra.

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

Espero que alguien encuentre esto útil, estuve atrapado por un tiempo tratando de encontrar una buena solución.

Mi inspiración vino de esta url.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top