Asp.netコア2.0 Webサイトのセッションを構成しようとしていますが、セッションCookieが設定されていません。
電話する ..
app.UseSession();
... Startup.Configureおよび...
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(10);
options.Cookie.HttpOnly = false;
options.Cookie.Name = "WS_AUTH_ID";
});
... ConfigureServicesメソッド内。
コントローラーではアクセスできます...
HttpContext.Session.Id;
...しかし、IDは要求ごとに常に異なります。
何か不足していますか?
更新:Cookieを「手動で」設定でき、ブラウザがそれらを「受信」することを覚えておく必要があります。
HttpContext.Response.Cookies.Append("Test_cookie", "yo");
これは私のための原因でした:
拡張子Microsoft.AspNetCore.CookiePolicy
(UseCookiePolicy
)がセッションCookieをブロックしていました。この拡張機能を削除し、新しいブラウザウィンドウでアプリを実行すると、問題が解決しました。
根拠:この拡張機能は、ユーザーが受け入れるまで、ブラウザーに送信されるCookieをブロックします。セッションキーはCookieに保存され、Cookieはこの拡張機能によってブロックされるため... Cookieなし、セッションなし。
別の回避策は、ユーザーがCookieを受け入れるまで、セッションなしでアプリケーションが機能できるようにすることです(この回避策はテストしませんでした)。
お役に立てば幸いです。
Cookieポリシーをオンにしている場合、ユーザーがCookieの使用を受け入れるまでセッションCookieは作成されません。これは、EUのGDPRに準拠するためです。
行app.UseCookiePolicy();
をStartup
から削除すると機能します。そうしないと、セッション制御にCookieを使用する前に、ユーザーがCookieの使用に同意する必要があります。
私にとって問題は質問に対するコメントの1つによって解決されました:
セッションに何かを追加しない限り、Cookieは書き込まれません。
したがって、Session.Id
は役に立ちません。実際に何かを設定する必要があります。
私の場合、それはある条件の後でのみ設定された変数であり、その条件が満たされる前に、新しいセッションIDを何度も作成していました。
ConfigureServicesメソッドに次のように入力する必要があります。
services.AddMvc()
.AddSessionStateTempDataProvider();
services.AddDistributedMemoryCache();
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.Cookie.Name = ".MyApplication";
});
Configureに次のように入力します
//enable session before MVC
app.UseSession();
app.UseMvc();