本文指出JavaScript和动态页面无法直接获取Cookie的过期时间,因为该信息仅由浏览器管理。文章提供了在ASP.NET和JavaScript中通过额外存储Cookie值来间接记录并获取过期时间的具体代码实现与解决方案。
Cookie过期时间的获取限制
JavaScript脚本与动态网页代码均无法直接读取Cookie的过期时间。过期时间的管理完全由浏览器负责,前端脚本或后端动态页面仅能设置过期时间,无法通过document.cookie(JavaScript)或Cookie.Expires(ASP.NET)等属性反向获取已设置的过期时间。
ASP.NET中的Cookie处理示例
示例代码如下:
<%@page language="C#" Debug="true"%>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
HttpCookie hc = Request.Cookies["abc"];
if (hc != null)
{
Response.Write(hc.Expires);//0001-1-1 0:00:00
Response.End();
}
}
</script>
尽管ASP.NET中的Cookie对象包含Expires属性,但通过Response.Write输出该属性时,返回的却是0001-1-1 0:00:00(即DateTime.MinValue)。这是因为浏览器在发送Cookie数据给服务器时,并不包含过期时间信息,服务器端因此使用DateTime.MinValue来填充该属性。若必须获取Cookie的过期时间,需借助另一个Cookie值来记录对应Cookie的过期时间。具体实现如下:
JavaScript获取过期时间的变通方案
示例代码如下:
<script>
var d = new Date();
d.setHours(d.getHours() + 1); //1小时候过期
document.cookie = 'testvalue=123;expires=' + d.toGMTString(); //存储cookie值
document.cookie = 'testexp=' + escape(d.toLocaleString()) + ';expires=' + d.toGMTString(); //存储cookie过期时间,要获取testvalue这个cookie的过期时间,通过获取testexp这个cookie来实现
</script>