为什么cookie的到期日期不能在ASP.NET中的会话中存活?

 来自星星的小小鱼 发布于 2023-01-30 15:14

我对testbed页面进行了一些更改,所以我可以在这里更清楚地提问.

该页面有三个按钮:Set; 明确; 得到.

Set有这个代码:

PreferredCookie = new HttpCookie("PreferredCookie");
PreferredCookie.Value = "Chocolate Chip";
DateTime exp = DateTime.Now.AddDays(1.0d);
PreferredCookie.Expires = exp;
Response.Cookies.Set(PreferredCookie);

清楚有这个:

HttpCookie PreferredCookie = Request.Cookies["PreferredCookie"];
if (PreferredCookie != null)
{
    PreferredCookie.Value = "";
    PreferredCookie.Expires = DateTime.Now;
    Response.Cookies.Set(PreferredCookie);
}

得到这个,输出到asp:Literal:

HttpCookie PreferredCookie = Request.Cookies["PreferredCookie"];
if (PreferredCookie != null)
{
    CookieLiteral.Text = "Value = " + PreferredCookie.Value + "
"; CookieLiteral.Text += "Expires = " + PreferredCookie.Expires.ToString("MM/dd/yyyy HH:mm:ss"); } else { CookieLiteral.Text = "

No Cookie?

"; }

如果我启动页面并单击"清除",然后使用"获取"进行后续操作,我会看到:

没有Cookie?

如果我然后单击Set,然后Get,我看到:

价值=巧克力片
过期= 01/01/0001 00:00:00

这个日期似乎被视为永不过期.如果我使用Firefox访问该页面,我会得到相同的结果.

1 个回答
  • 简答 - 您无法读取cookie的到期日期和时间.

    稍微长一点的答案 -这不是ASP.NET中的会话问题.这是您可以从ASP.NET中的cookie服务器端读取的问题.根据MSDN:

    浏览器负责管理cookie,cookie的过期时间和日期有助于浏览器管理其cookie存储.因此,虽然您可以读取cookie的名称和值,但您无法读取cookie的到期日期和时间.当浏览器向服务器发送cookie信息时,浏览器不包含过期信息.(cookie的Expires属性始终返回零日期时间值.)

    在将cookie发送到浏览器之前,您可以读取已在HttpResponse对象中设置的cookie的Expires属性. 但是,您无法在HttpRequest对象中返回到期日期.

    所以基本上,cookie到期日期设置正确.这可以通过检查浏览器中的cookie来验证.不幸的是,像Get函数一样读取这个cookie 将返回1/1/0001.

    如果你真的想要过期,那么你必须将它存储在cookie本身中:

    DateTime exp = DateTime.Now.AddDays(1);
    HttpCookie PreferredCookie = new HttpCookie("PreferredCookie");
    PreferredCookie.Values.Add("cookieType", "Zref");
    PreferredCookie.Values.Add("exp", exp.ToString());
    PreferredCookie.Expires = exp;
    Response.Cookies.Set(PreferredCookie);
    

    得到

    HttpCookie PreferredCookie = Request.Cookies["PreferredCookie"];
    if (PreferredCookie != null)
    {
        CookieLiteral.Text = "Value = " + PreferredCookie["cookieType"] + "<br>";
        CookieLiteral.Text += "Expires = " + PreferredCookie["exp"];
    }
    else
    {
        CookieLiteral.Text = "No Cookie";
    }
    

    2023-01-30 15:17 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有