首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在ASP.NET中创建持久cookies?

如何在ASP.NET中创建持久cookies?
EN

Stack Overflow用户
提问于 2010-06-29 19:52:37
回答 5查看 116.1K关注 0票数 78

我正在创建包含以下代码行的cookie:

代码语言:javascript
复制
HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires.AddYears(1);
Response.Cookies.Add(userid);

现在,我如何才能使其持久化?

如果我在关闭浏览器后再次访问同一页面,我无法找回它。

EN

回答 5

Stack Overflow用户

发布于 2015-06-26 03:41:24

虽然被接受的答案是正确的,但它没有说明原始代码无法工作的原因。

你问题中的错误代码:

代码语言:javascript
复制
HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires.AddYears(1);
Response.Cookies.Add(userid);

看一下第二行。过期的依据是Expires属性,该属性包含默认值1/1/0001。以上代码的计算结果为1/1/0002。此外,不会将计算结果保存回属性。相反,Expires属性应以当前日期为基础进行设置。

已更正代码:

代码语言:javascript
复制
HttpCookie userid = new HttpCookie("userid", objUser.id.ToString());
userid.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(userid);
票数 58
EN

Stack Overflow用户

发布于 2010-06-29 20:23:05

FWIW在未加密的cookie中存储像userid这样的东西时要非常小心。这样做会使您的站点非常容易受到cookie中毒的影响,用户可以很容易地冒充其他用户。如果您正在考虑这样的事情,我强烈建议您直接使用forms身份验证cookie。

代码语言:javascript
复制
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);

然后,您可以通过执行以下操作,随时从ASP.NET页面读取此文件

代码语言:javascript
复制
string userId = null;
if (this.Context.User.Identity.IsAuthenticated) 
{
    userId = this.Context.User.Identity.Name;
}
票数 28
EN

Stack Overflow用户

发布于 2015-11-27 01:08:34

据我所知,您使用ASP.NET身份验证,要设置cookies持久性,您需要设置FormsAuthenticationTicket.IsPersistent = true,这是主要思想。

代码语言:javascript
复制
bool isPersisted = true;
var authTicket = new FormsAuthenticationTicket(
1,
user_name, 
DateTime.Now,
DateTime.Now.AddYears(1),//Expiration (you can set it to 1 year)
isPersisted,//THIS IS THE MAIN FLAG
addition_data);
    HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, authTicket );
    if (isPersisted)
        authCookie.Expires = authTicket.Expiration;

HttpContext.Current.Response.Cookies.Add(authCookie);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3140341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档