web-dev-qa-db-fra.com

Cookie de session jamais défini dans le noyau asp.net

J'essaie de configurer des sessions pour un site Web asp.net core 2.0, mais le cookie de session n'est jamais défini.

J'appelle ..

app.UseSession();

... dans Startup.Configure et ...

        services.AddDistributedMemoryCache();

        services.AddSession(options =>
        {
            options.IdleTimeout = TimeSpan.FromMinutes(10);
            options.Cookie.HttpOnly = false;
            options.Cookie.Name = "WS_AUTH_ID";
        });

... dans la méthode ConfigureServices.

Dans le contrôleur, je peux accéder ...

HttpContext.Session.Id;

... mais l'identifiant est toujours différent pour chaque demande.

Suis-je en train de manquer quelque chose?

Mise à jour: je dois dire que je peux définir des cookies "manuellement" et que le navigateur les "recevra".

HttpContext.Response.Cookies.Append("Test_cookie", "yo");
10
Preli

Ce fut la cause pour moi:

L'extension Microsoft.AspNetCore.CookiePolicy (UseCookiePolicy) bloquait le cookie de session. La suppression de cette extension et l'exécution de l'application dans une nouvelle fenêtre de navigateur ont résolu le problème.

Justification: cette extension bloque les cookies envoyés au navigateur jusqu'à ce que l'utilisateur les accepte. La clé de session étant stockée dans un cookie et les cookies sont bloqués par cette extension ... Pas de cookies, pas de session.

Une autre solution pourrait être de permettre à l'application de fonctionner sans session jusqu'à ce que l'utilisateur accepte les cookies (je n'ai pas testé cette solution).

J'espère que cela pourra aider.

12
Mark

Si vous avez activé la politique de cookies, la session de cuisson ne sera pas créée tant que l'utilisateur n'utilisera pas les cookies, c'est pour se conformer au RGPD de l'UE.

Vous pouvez supprimer la ligne app.UseCookiePolicy(); de vous Startup et cela fonctionnera, sinon vos utilisateurs devront accepter l'utilisation de cookies avant de pouvoir utiliser le cookie pour le contrôle de session.

3
Rui Lima

Pour moi, le problème a été résolu par l'un des commentaires sur la question:

Le cookie n'est pas écrit sauf si vous ajoutez quelque chose à la session.

Il suffit donc de demander le Session.Id n'aidera pas, vous devez en fait définir quelque chose.

Dans mon cas, c'était une variable qui n'était définie qu'après une certaine condition, et avant que cette condition ne soit remplie, elle créerait un nouvel ID de session encore et encore.

1
Jham

Vous devez taper ce qui suit dans votre méthode ConfigureServices:

services.AddMvc()
    .AddSessionStateTempDataProvider();

services.AddDistributedMemoryCache();
services.AddSession(options =>
{
    options.IdleTimeout = TimeSpan.FromMinutes(30);
    options.Cookie.Name = ".MyApplication";
}); 

Dans votre Configure, tapez ce qui suit

//enable session before MVC
app.UseSession();
app.UseMvc();
0
pitaridis