うまくいくと思われる解決策を見つけました
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から来ました。