3

Cookie なしのセッションと Cookie セッションを混在させることはできますか?

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

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

にリダイレクトします

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

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

したがって、本質的には、アプリケーションの大部分で標準の Cookie セッションを使用しますが、ssl ページに転送するときに、セッションを取得するために SessionId を https URL に渡します。これをローカルで試しましたが、新しいセッションが開始されます。

私はトリックを逃していますか?

ありがとう

4

1 に答える 1

2

うまくいくと思われる解決策を見つけました

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 を持つ新しいセッション Cookie を追加します。セッションの keyValue ペアを設定する AquireSessionState はこの時点で既に実行されているため、これらの値を再設定するためにページをページ自体にリダイレクトする必要があります。

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

    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 に次のように書いて、支払いページでない場合は標準の非 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から来ました。

于 2011-03-20T11:09:07.063 に答える