在c#代码隐藏中设置和检索cookie

本文关键字:检索 cookie 设置 代码 隐藏 | 更新日期: 2023-09-27 18:01:12

我试图在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"]'为null。

有人看到我哪里出错了吗?

在c#代码隐藏中设置和检索cookie

您的代码看起来不错。

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

我建议的第一件事是确定cookie是否被发送到浏览器。使用Fiddler或Wireshark之类的工具来检查服务器和浏览器之间的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
  • 正如@mituw16在评论中所建议的那样,打开与cookie相关的网站,并使用浏览器的开发工具检查cookie,看看你的cookie是否存在
  • 如果没有cookie,请尝试创建一个非常简单的应用程序,如ASP.NET Cookies概述中所述(向下滚动到"确定浏览器是否接受Cookies"部分(
  • 如果浏览器中仍然没有cookie,则您的浏览器可能存在错误,尤其是IE 11。如果cookie的域包含下划线(例如http://www.my_web_site.com/((请参阅Internet Explorer cookie内部问题解答(,并且IE 11在IFrame和模式弹出窗口中存在cookie问题(SO讨论(,则IE 11不会存储cookie。IE 11还更改了其用户代理字符串,这会导致cookie出现更多问题