在 c# 中读取 cookie
本文关键字:cookie 读取 | 更新日期: 2023-09-27 18:37:04
我希望访问我的国际化网站的人能够更改语言。我认为最好的方法是将选择的语言存储在 cookie 中 - 这样当页面加载时,它可以在 cookie 中查找首选语言。
编写cookie是完美的,但是我在尝试阅读它时一直遇到错误。由于我是 C# 的新手,我在翻译视觉工作室给我的错误时遇到了麻烦。
我想要一个名为"用户设置"的 cookie 的值,该字符串位于名为 lang 的字符串中。我正在尝试这样做:
string lang = Request.Cookies["UserSettings"].Value;
它抛出的错误是:
对象引用未设置为对象的实例
我认为问题必须出在语句的右侧,因为我正在初始化左侧的字符串。
我还尝试通过做来制作cookie的实例
HttpCookie cookie = Request.Cookies["UserSettings"].Value;
但是Visual Studio根本不喜欢这样。
我做错了什么?我是否必须创建请求对象的实例?任何帮助将不胜感激。
我正在遵循有关此主题的不同教程,但它们都会导致相同的错误。
编辑:我注意到我有
HttpCookie cookie = Request.Cookies["UserSettings"].Value;
我把它改成:
HttpCookie cookie = Request.Cookies["UserSettings"];
但是没有运气,它仍然不起作用。
编辑:这就是我的饼干的制作方式
public void Application_BeginRequest()
{
myCookie = new HttpCookie("UserSettings");
myCookie.Value = "nl";
myCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(myCookie);
hc = new HomeController();
}
我的cookie是100%在那里,我绝对确定,我可以在Firefox-web开发人员中看到它。
更新:这是我现在调用的确切代码
public string getLang()
{
// HttpCookie aCookie = Request.Cookies["UserSettings"];
// string lang = Server.HtmlEncode(aCookie.Value);
// if (lang != null)
// {
// currentLanguage = lang;
// }
return currentLanguage;
}
这样我的代码就可以编译,如果我取消注释我的代码,那么它就不会(错误@此方法的第一行)
听起来饼干永远不会被设置。在这种情况下,您需要检查以下内容:
HttpCookie aCookie = Request.Cookies["UserSettings"];
if(aCookie != null) {
object userSettings = aCookie.Value;
} else {
//Cookie not set.
}
要设置 Cookie:
HttpCookie cookie = new HttpCookie("UserSettings");
cookie["UserSettings"] = myUserSettingsObject;
cookie.Expires = DateTime.Now.AddYears(1);
Response.Cookies.Add(cookie);
这是一篇好文章:http://www.java2s.com/Code/ASP/Session-Cookie/CreateandretrieveCookiedataC.htm
你能试试这个吗?
HttpCookie aCookie = Request.Cookies["UserSettings"];
string lang = Server.HtmlEncode(aCookie.Value);
http://msdn.microsoft.com/en-us/library/ms178194.aspx
编辑这对你有帮助吗?asp.net MVC 无法访问基本控制器中的 Cookie 数据
要设置 cookie 值:
HttpCookie Userinfo= new HttpCookie("Userinfo");
Userinfo["Username"] = application.username.ToString();
Response.Cookies.Add(Userinfo);
要获取 cookie 值,请执行以下操作:
HttpCookie reqUserinfocookies = Request.Cookies["Userinfo"];
if (reqUserinfocookies != null)
{
string username = reqUserinfocookies["username"];
}
您可以在Application_BeginRequest()
中创建cookie并将结果添加到Response
中。只有在发送回响应后,才会在客户端创建它。
但是您正在从Request
状态读取 cookie 值,也许是带有 cookie 的响应之前的原始请求已发送回客户端?然而,在生命周期的这个时候,这个cookie不包含在Request
中,因此是null
。
您的客户端必须在创建cookie后发送另一个请求才能使其可供服务器使用,这对我来说非常有意义。
您可以在 Web 开发人员工具中看到 cookie 的原因是,服务器会将Response
发送回客户端。但是,除非客户端将发送带有 cookie 的新请求,否则它不会出现在当前Request
状态中。
首先检查是否创建了cookie。
为此,请使用火狐浏览器并添加Web开发人员插件
安装Web开发人员后,火狐浏览器上会出现一个工具栏,在其上
选择cookie选项卡饼干 -> 查看饼干信息,它将显示所有饼干及其属性。
HttpCookie myCookie = new HttpCookie("UserSettings");
myCookie = Request.Cookies["UserSettings"];
string lang = myCookie.Value.ToString();
尝试设置 cookie。路径 ="/";
在添加 Cookie 之前。