2

我在使用 .Expires cookie 属性时遇到问题。当我读回 cookie 时,它​​一直在 01/01/0001 12:00 AM 回来。

这是代码。我在保存下方的检索中添加仅用于调试目的。保存和检索发生在同一文件的不同位置。我故意没有指定域,因为我希望 cookie 在站点范围内存在。

数据显示得很好,只是没有过期。

注意:我正在使用 .Net Framework 4 在本地主机下运行的 Visual Studio 2012 下进行测试。

System.Web.UI.Page oPage = this.Page;

HttpCookie oCookie = new HttpCookie("UserData");

// Set the cookie value.
oCookie.Secure = false;
oCookie["Field1"] = strField1;
oCookie["Field2"] = strField2;
oCookie.Expires = DateTime.Now.AddDays(1);

// Add the cookie.
oPage.Response.Cookies.Add(oCookie);


// Get the cookie.
oCookie = new HttpCookie("UserData");
oCookie = oPage.Request.Cookies["UserData"];
4

3 回答 3

4

除了 cookie 名称和值之外,浏览器不会向服务器发送任何内容。设置 cookie 后,无法在请求中检索所有其他属性(过期、域、路径、httponly...)。

更普遍的处理方法是在用户尝试访问受保护的资源时将用户重定向到登录页面,并显示一些消息,如“您需要登录才能查看此页面。如果您以前登录过,您的会话可能已过期。”

(另请注意,您应该在每个请求上重新设置 cookie,以便用户在继续使用该站点时不会被注销。从您的代码中不清楚您是否这样做。)

于 2013-01-14T19:40:18.050 回答
1

我只是对我的问题进行了更多的谷歌搜索,并看到了这个链接,这是 Stackoverflow 上的另一个帖子。

Cookie 总是过期的

我也在使用构造进行验证:

if (cookie != null && cookie.Expires > DateTime.Now)...

正如一些人指出的那样,如果您无法再检索 cookie,则会发生过期检查。这对于建造这个架构的人来说是非常愚蠢的。是的,也许应该有 RequestCookie 和 ResponseCookie,区别在于 ResponseCookie 没有到期日期。

回复我的人告诉我,不仅仅是过期,其他领域也是如此。

于 2013-01-14T19:50:57.100 回答
0

在 C# 代码中,如果使用表单身份验证,您可以使用以下代码查看 cookie 是否持久
bool IsCookiePersistent = ((FormsIdentity)User.Identity).Ticket.IsPersistent;

这里Ticket将返回FormsAuthenticationTicket具有ExpirationDateTime 属性的那个。

于 2018-10-25T09:19:45.867 回答