ASP.NET CookielessとCookieセッションで保存されたセッションデータを混ぜることはできますか?

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

質問

Cookieセッションで混合Cookielessセッションを使用することは可能ですか?

ユーザーの詳細をキャプチャし、SSLページへの支払いのためにリダイレクトするアプリケーションがあります。これが可能かどうか疑問に思っていましたか?

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

にリダイレクトします

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

注:後者のURLのセッションID。

したがって、本質的に、アプリケーションの大部分で標準のCookieセッションを使用しますが、SSLページに転送すると、SessionIDをHTTPS URLに渡してセッションをピックアップします。私はこれをローカルで試しましたが、新しいセッションを開始します。

トリックが足りないのですか?

ありがとう

役に立ちましたか?

解決

機能しているように見えるソリューションを見つけました

HTTPとHTTPSを転送するとき、私は次のとおりです。

ご覧のとおり、セッションIDを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はリクエストを新しいセッションと見なしているため、Global.ASAXでstart_Sessionメソッドを使用して、新しく作成されたセッションを放棄し、クエリIDが渡されたセッションIDで新しいセッションCookieを追加します。セッションKeyValueペアに浸透するAquiressessionStateは、この時点ですでに実行されているため、これらの値を再現するためにページをそれ自体にリダイレクトする必要があります。

本当にうまくいくようです:)

    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 Purchase.aspxページを閲覧しながら、外部リンクをクリックしている人に関しても、Global.asaxで書いたAspxページは、支払いページでない場合は標準の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