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

时间:2015-07-06 18:21:36

标签: c# asp.net cookies

我尝试在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;
   }
}

我总是得到这个.Request.Cookies [" default_Loc"]'是空的。

谁能看到我哪里出错了?

1 个答案:

答案 0 :(得分:2)

您的代码看起来不错。

问题可能是服务器永远不会将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。
  • 根据评论中@ mituw16的建议,打开与Cookie相关联的网站,并使用浏览器的开发者工具检查Cookie并查看您的Cookie是否存在。
  • 如果cookie不存在,请尝试创建一个非常简单的应用程序,如ASP.NET Cookies Overview中所述(向下滚动到"确定浏览器是否接受Cookie"部分)。
  • 如果cookie仍未出现在浏览器中,则您的浏览器可能存在错误,尤其是IE 11.如果Cookie的域名包含下划线,IE 11将无法存储Cookie(例如http://www.my_web_site.com/)(请参阅Internet Explorer Cookie Internals (FAQ)),IE 11在IFramesmodal popupsSO discussion)中存在Cookie问题。 IE 11还更改了其用户代理字符串,这甚至导致more problems带有cookie。