在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。
有人看到我哪里出错了吗?
您的代码看起来不错。
问题可能是服务器从未向浏览器发送cookie,或者浏览器没有按照您的意愿处理cookie。
我建议的第一件事是确定cookie是否被发送到浏览器。使用Fiddler或Wireshark之类的工具来检查服务器和浏览器之间的HTTP流量。
如果服务器没有发送cookie,请执行以下检查:
- 在
web.config
文件中搜索httpCookies部分。如果存在,请检查requireSSL
设置。如果requireSSL
设置为true(即https(,但网站尝试通过纯http发送cookie,则cookie不会发送到浏览器 - 在ASP.Net处理完页面之前,可能有代码正在删除cookie。在代码中搜索类似
Cookies.Clear
或Cookies.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出现更多问题