web-dev-qa-db-ja.com

セッションCookieがasp.netコアに設定されない

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");
10
Preli

これは私のための原因でした:

拡張子Microsoft.AspNetCore.CookiePolicyUseCookiePolicy)がセッションCookieをブロックしていました。この拡張機能を削除し、新しいブラウザウィンドウでアプリを実行すると、問題が解決しました。

根拠:この拡張機能は、ユーザーが受け入れるまで、ブラウザーに送信されるCookieをブロックします。セッションキーはCookieに保存され、Cookieはこの拡張機能によってブロックされるため... Cookieなし、セッションなし。

別の回避策は、ユーザーがCookieを受け入れるまで、セッションなしでアプリケーションが機能できるようにすることです(この回避策はテストしませんでした)。

お役に立てば幸いです。

12
Mark

Cookieポリシーをオンにしている場合、ユーザーがCookieの使用を受け入れるまでセッションCookieは作成されません。これは、EUのGDPRに準拠するためです。

app.UseCookiePolicy();Startupから削除すると機能します。そうしないと、セッション制御にCookieを使用する前に、ユーザーがCookieの使用に同意する必要があります。

3
Rui Lima

私にとって問題は質問に対するコメントの1つによって解決されました:

セッションに何かを追加しない限り、Cookieは書き込まれません。

したがって、Session.Idは役に立ちません。実際に何かを設定する必要があります。

私の場合、それはある条件の後でのみ設定された変数であり、その条件が満たされる前に、新しいセッションIDを何度も作成していました。

1
Jham

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();
0
pitaridis