【问题标题】:Setting and retrieving cookies in c# code behind在后面的 c# 代码中设置和检索 cookie
【发布时间】:2023-03-30 18:45:02
【问题描述】:

我尝试将下拉列表的选择保存到 SelectedIndexChanged 事件中的 cookie。

protected void BranchNumberList_SelectedIndexchanged(object sender, EventArgs e)
{
   HttpCookie myCookie = new HttpCookie("default_Loc", BranchNumberList.SelectedValue);
   myCookie.Expires = DateTime.Now.AddDays(365);
   Response.Cookies.Add(myCookie);
   ViewDate.Enabled = true;
   SelectEverything();
}

myCookie 看起来不错,我可以通过快速观察在响应对象中看到它。

当从 Page_Load 调用此方法时,我尝试在下次登录时检索它。

private void BranchName()
{
   DatabaseHelpers dh = new DatabaseHelpers();
   DataSet DrpDownSrc = dh.FillBranchSelection(objConn);
   BranchNumberList.DataSource = DrpDownSrc;
   BranchNumberList.DataTextField = "BranchName";
   BranchNumberList.DataValueField = "LocationID";
   BranchNumberList.DataBind();
   BranchNumberList.Items.Insert(0, "Select a branch");
   try
   {
      BranchNumberList.SelectedValue = this.Request.Cookies["default_Loc"].Value;
   }
   catch (Exception)
   {
      BranchNumberList.SelectedIndex = 0;
   }
}

我总是得到 'this.Request.Cookies["default_Loc"]' 为空。

谁能看出我哪里出错了?

【问题讨论】:

  • 你能打开你的浏览器并验证cookie被设置了吗?在 Chrome 中,您将打开开发工具 --> 资源 --> Cookies --> 页面 --> 并查看与您的页面关联的所有 cookie。
  • 你在哪里设置 Request.Cookies["default_Loc"] 的值

标签: c# asp.net cookies


【解决方案1】:

您的代码看起来不错。

问题可能是服务器从未将 cookie 发送到浏览器,或者浏览器没有按照您的意愿处理 cookie。

我建议的第一件事是确定 cookie 是否正在发送到浏览器。使用FiddlerWireshark 之类的工具来检查服务器和浏览器之间的HTTP 流量。

如果服务器没有发送 cookie,请执行以下检查:

  • web.config 文件中搜索httpCookies 部分。如果存在,请检查 requireSSL 设置。如果 requireSSL 设置为 true(即 https),但网站尝试通过纯 http 发送 cookie,则不会将 cookie 发送到浏览器。
  • 可能有代码在 ASP.Net 完成页面处理之前删除了 cookie。在您的代码中搜索 Cookies.ClearCookies.Remove 等内容。

如果 cookie 被发送到浏览器,下一步是确定浏览器是否正确处理 cookie。在至少两种不同类型的浏览器(例如 Internet Explorer、Google Chrome、FireFox 等)中尝试以下操作:

  • 检查运行浏览器的计算机的日期和时间。如果计算机的日期/时间设置为超过 cookie 的过期日期,浏览器将认为 cookie 已过期并且不会将其返回给服务器。
  • 检查浏览器的设置并确保它接受 cookie。
  • 按照 cmets 中 @mituw16 的建议,打开与 cookie 关联的网站并使用浏览器的开发人员工具检查 cookie 并查看您的 cookie 是否存在。
  • 如果 cookie 不存在,请尝试按照ASP.NET Cookies Overview 中的说明创建一个非常简单的应用(向下滚动到“确定浏览器是否接受 Cookie”部分)。
  • 如果 cookie 仍然不存在于浏览器中,则您的浏览器可能存在错误,尤其是 IE 11。如果 cookie 的域包含下划线(例如 http://www.my_web_site.com/),IE 11 将不会存储 cookie(参见 @987654325 @),而 IE 11 在 IFramesmodal popups (SO discussion) 中的 cookie 存在问题。 IE 11 还更改了它的用户代理字符串,这甚至导致 more problems 带有 cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 1970-01-01
    相关资源
    最近更新 更多