Web.Config
ファイルとGlbal.asax.cs
ファイルに以下のコード行を含めましたが、ブラウザーで開発者ツールを使用しても、以下のCookieにセキュアフラグが設定されていません。また、my IISでSSLSettingsを構成しました(チェックボックスrequireSSLを選択)。
受信しただけでなく送信したCookieにも、すべてのCookieにセキュア属性を設定したいと思います。
Web.config
:
<httpCookies requireSSL="true"/>
Global.asax.cs
:
protected void Application_EndRequest(object sender, EventArgs e)
{
if (Request.IsSecureConnection == true && HttpContext.Current.Request.Url.Scheme == "https")
{
Request.Cookies["ASP.NET_SessionID"].Secure = true;
if (Request.Cookies.Count > 0)
{
foreach (string s in Request.Cookies.AllKeys)
{
Request.Cookies[s].Secure = true;
}
}
Response.Cookies["ASP.NET_SessionID"].Secure = true;
if (Response.Cookies.Count > 0)
{
foreach (string s in Response.Cookies.AllKeys)
{
Response.Cookies[s].Secure = true;
}
}
}
}
次に、アプリケーションをIIS 7.5でローカルマシンにホストしました。SSL設定でRequireSSLオプションを有効にしました。[参照] * .443(https)をクリックすると、ローカルホストがHTTPSで実行されているのが見えますが、ブラウザでcookie属性を確認すると、secureフラグが設定されていません。
ここに設定がありませんか?
混乱は、コーディングや設定のエラーではなく、Cookieの動作に関する誤解の結果です。
サーバーがCookieを作成または変更する場合は、Set-Cookie
応答ヘッダーを使用して行います。そこで、サーバーは、ブラウザがCookieを処理する方法を指定することもできます。安全であるかどうかなど、どのくらいの期間保持するか。この情報は、Cookieが最初に作成されたときに一度だけ送信されます。
すべてのリクエストで、クライアントはすべてのCookieをCookies
リクエストヘッダーでサーバーに送信します。次に、名前と値のみを送信します。追加情報(セキュアフラグなど)は送信されません。これらはサーバーからクライアントへの指示であり、クライアントがサーバーに指示を繰り返す必要はありません。
したがって、サーバーがSet-Cookie
ヘッダーにsecure
フラグを含めた場合、Cookieは「安全」です。その後、クライアントがCookies
ヘッダーで送信するものは関係ありません。したがって、リクエストCookieを安全であるとマークしようとしても、ほとんど意味がありません。
では、送信されたCookieが開発者ツールで安全であると報告されないのはなぜですか?それは単にフィールドがそれらに適用可能ではないため、空白のままにされているからです。 IEでそれを行う方法はわかりませんが、Chromeに切り替えると、[アプリケーション]タブですべてのCookieのリストを取得でき、どのCookieであるかを簡単に確認できます安全とマークされています。
免責事項:私はASP.NETプログラマではありません。