ASP.NET Можете ли вы смешать CookieLess с хранимыми данными сеанса cookie?

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

Вопрос

Можно ли использовать смешанные сеансы Cookieless с сеансами печенья?

У меня приложение, которое сняло данные пользователя, а затем перенаправляют для оплаты на страницу SSL. Мне было интересно, возможно ли это?

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

перенаправляет на

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

Примечание: идентификатор сеанса в последнем URL.

По сути, мы используем стандартный сеанс cookie для большей части приложения, но когда мы переходим на страницу SSL, мы передаем SessionID на URL HTTPS, чтобы забрать сеанс. Я попробовал это на местном уровне, но это начинает новую сессию.

Я упускаю уловку?

Спасибо

Это было полезно?

Решение

Я нашел решение, которое, кажется, работает

При переносе между 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 с сеансом с идентификатором сеанса, передаваемым из строки запроса. Поскольку AquyresessionState, которая заполняет пару сеанса 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.

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top