69 votes

Comment créer des cookies persistants dans asp.net?

Je suis la création de cookies avec des lignes suivantes:

HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires.AddYears(1);
Response.Cookies.Add(userid);

Maintenant, Comment le rendre persistant?

Parce que si je visite à nouveau la même page après la fermeture du navigateur, je ne suis pas en mesure de le récupérer.

97voto

this. __curious_geek Points 23728

Voici comment vous pouvez le faire.

Écrit le cookie persistant.

//create a cookie
HttpCookie myCookie = new HttpCookie("myCookie");

//Add key-values in the cookie
myCookie.Values.Add("userid", objUser.id.ToString());

//set cookie expiry date-time. Made it to last for next 12 hours.
myCookie.Expires = DateTime.Now.AddHours(12);

//Most important, write the cookie to client.
Response.Cookies.Add(myCookie);

La lecture du cookie persistant.

//Assuming user comes back after several hours. several < 12.
//Read the cookie from Request.
HttpCookie myCookie = Request.Cookies["myCookie"];
if (myCookie == null)
{
    //No cookie found or cookie expired.
    //Handle the situation here, Redirect the user or simply return;
}

//ok - cookie is found.
//Gracefully check if the cookie has the key-value as expected.
if (!string.IsNullOrEmpty(myCookie.Values["userid"]))
{
    string userId = myCookie.Values["userid"].ToString();
    //Yes userId is found. Mission accomplished.
}

26voto

Chris Marisic Points 11495

FWIW être très prudent avec les stocker quelque chose comme un nom d'utilisateur dans un cookie chiffré. En faisant cela rend votre site très sensibles à l'empoisonnement des cookies, où les utilisateurs peuvent facilement se faire passer pour un autre utilisateur. Si vous envisagez quelque chose comme cela, je recommande fortement d'utiliser le cookie d'authentification de formulaires directement.

bool persist = true;

var cookie = FormsAuthentication.GetAuthCookie(loginUser.ContactId, persist);

cookie.Expires = DateTime.Now.AddMonths(3);

var ticket = FormsAuthentication.Decrypt(cookie.Value);

var userData = "store any string values you want inside the ticket
                 extra than user id that will be encrypted"

var newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name,
     ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, userData);

cookie.Value = FormsAuthentication.Encrypt(newTicket);

Response.Cookies.Add(cookie);

Ensuite, vous pouvez lire à tout moment à partir d'un ASP.NET page

string userId = null;
if(this.Context.User.Identity.IsAuthenticated)
    userid = this.Context.User.Identity.Name;

0voto

Robert Williams Points 1177

Vous devez ajouter ce que la dernière ligne...

HttpContext.Current.Response.Cookies.Add(userid);

Lorsque vous avez besoin de lire la valeur du cookie, vous pouvez utiliser une méthode similaire à ceci:

    string cookieUserID= String.Empty;

    try
    {
        if (HttpContext.Current.Request.Cookies["userid"] != null)
        {
            cookieUserID = HttpContext.Current.Request.Cookies["userid"];
        }
    }
    catch (Exception ex)
    {
       //handle error
    }

    return cookieUserID;

0voto

Diganta Kumar Points 1467

//ajout d'un cookie

var panelIdCookie = new HttpCookie("panelIdCookie");
panelIdCookie.Values.Add("panelId", panelId.ToString(CultureInfo.InvariantCulture));
panelIdCookie.Expires = DateTime.Now.AddMonths(2); 
Response.Cookies.Add(panelIdCookie);

//lire le cookie

    var httpCookie = Request.Cookies["panelIdCookie"];
                if (httpCookie != null)
                {
                    panelId = Convert.ToInt32(httpCookie["panelId"]);
                }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X