如何创建持久性cookie和非持久性cookie?

Chu*_* Wu 54 cookies http

我似乎无法弄清楚如何创建持久性与非持久性cookie.例如,它们在发回的HTTP标头中有何不同?

Tim*_*ora 72

Cookie具有隐式或显式设置的到期日期,用于控制它们持续多长时间(取决于用户代理实际执行它).Cookie可能仅在会话期间(或更短的时间段)持续存在.

如果cookie有效,它将与HTTP请求一起传递到它发起的域.只有设置cookie的域才能读取cookie(尽管有各种方法可以利用它,例如跨站点脚本).

  • 如果您希望cookie在特定时间到期,请使用您选择的客户端或服务器端语言在其上设置过期日期.

  • 如果您希望cookie在会话结束时过期,请不要设置过期日期.

来自RFC(强调我的):

cookie setter可以指定删除日期,在这种情况下,cookie将在该日期被删除.

如果cookie setter未指定日期,则在用户退出其浏览器后将删除cookie.

因此,指定日期是使Cookie在会话中存活的一种方式.因此,具有到期日期的cookie称为持久性.

作为示例应用程序,购物站点可以使用持久性cookie来存储用户放置在其篮子中的项目.(实际上,cookie可能是指存储在购物网站而不是计算机上的数据库中的条目.)这样,如果用户退出浏览器而未进行购买并稍后返回,他们仍然会在因此,他们不必再次寻找这些物品.如果这些cookie没有给出过期日期,它们将在浏览器关闭时到期,并且有关篮子内容的信息将丢失.

  • 我终于知道发生了什么.在Firefox上,如果你打开会话恢复("当Firefox启动时:从上次显示我的窗口和选项卡"),它会在你重启时恢复会话cookie!请参阅https://bugzilla.mozilla.org/show_bug.cgi?id=443354 (5认同)

Dee*_*wal 10

ASP.NET中有两种类型的cookie

持久性cookie:

Cookie存储在您的计算机硬盘上.它们保留在您的硬盘上,可以被Web服务器访问,直到它们被删除或过期.

public void SetPersistentCookies(string name, string value)
{
    HttpCookie cookie = new HttpCookie(name);

    cookie.Value = value;

    cookie.Expires = Convert.ToDateTime(“12/12/2008?);

    Response.Cookies.Add(cookie);
}
Run Code Online (Sandbox Code Playgroud)

非持久性cookie:

Cookie仅在您的Web浏览器运行时保存.只有在您关闭浏览器之前,它们才能由Web服务器使用.它们不会保存在您的磁盘上.

public void SetNonPersistentCookies(string name, string value)
{
    HttpCookie cookie = new HttpCookie(name);

    cookie.Value = value;

    Response.Cookies.Add(cookie);
}
Run Code Online (Sandbox Code Playgroud)


exp*_*ode 6

会话cookie

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
Response.Cookies.Add(cookie);
Run Code Online (Sandbox Code Playgroud)

带有特定时间戳的Cookie(.NET DateTime库)

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
cookie.Expires = DateTime.Today.AddMonths(12); //or AddMinutes, or AddHours...
Response.Cookies.Add(cookie);
Run Code Online (Sandbox Code Playgroud)

持久性Cookie

HttpCookie cookie = new HttpCookie("myCookieName", "myCookieValue");
cookie.Expires = DateTime.MaxValue;
Response.Cookies.Add(cookie);
Run Code Online (Sandbox Code Playgroud)