读/写Cookies

时间:2012-06-13 08:01:45

标签: c# asp.net cookies

我今天加入了这个网站,希望有人能够向我解释我在ASP.NET中做错了什么。 如果我的问题太基础,我仍然在学习如此教学,但我无法在谷歌找到答案。我找到的每个答案都显示了我已有的代码。

我正在尝试创建和阅读Cookie,我已将此代码放在我的应用程序构造函数中。这就是我尝试初始化我的cookie并将其添加到浏览器的方式。

的global.asax.cs

    public MyApplication()
    {
        myCookie = new HttpCookie("UserSettings");
        myCookie.Value = "nl";
        myCookie.Expires = DateTime.Now.AddDays(1d);
        Response.Cookies.Add(myCookie);
    }

HomeController.cs中的一个方法(尝试读取cookie)

    public void setLang(string lang)
    {
        HttpCookie myCookie = Request.Cookies["UserSettings"];
        myCookie.Value = lang;
        //rest of method

我在Response.Cookies.Add(myCookie)收到错误; [HttpException(0x80004005):在此上下文中无响应。]

我的想法是我可能忘记导入命名空间或其他东西,但我没有做任何事情似乎解决了这个错误,有人能指出我正确的方向吗?

4 个答案:

答案 0 :(得分:20)

您无法使用Global.asax构造函数向Response添加cookie,因为在应用程序开始处理HTTP请求之前会调用Global.asax构造函数。

将代码从Global.asax构造函数移动到Application_BeginRequest方法:

public void Application_BeginRequest()
{
    myCookie = new HttpCookie("UserSettings");
    myCookie.Value = "nl";
    myCookie.Expires = DateTime.Now.AddDays(1d);
    Response.Cookies.Add(myCookie);
}

Global.asax有许多不同的事件被触发,你只是选错了。

  • Application_Init:第一次初始化应用程序时触发。
  • Application_Start:第一次启动应用程序时触发。
  • Session_Start:第一次启动用户会话时触发。
  • Application_BeginRequest:每次有新请求时都会触发。
  • Application_EndRequest:请求结束时触发。
  • Application_AuthenticateRequest:表示请求已准备好进行身份验证。
  • Application_Error:在应用程序中发生未处理的错误时触发。
  • Session_End:每当单个用户会话结束或超时时触发。
  • Application_End:应用程序结束或超时时触发(通常用于应用程序清理逻辑)。

(来自http://en.wikipedia.org/wiki/Global.asax

答案 1 :(得分:0)

cookie是存储在客户端计算机上的一小段信息。此文件位于客户端计算机上。它用于在客户端计算机上存储用户首选项信息,如用户名,密码,城市和PhoneNo等。在使用cookie之前,我们需要导入名为Systen.Web.HttpCookie的命名空间。

Cookie类型?      持久Cookie - Cookie没有过期时间称为持久Cookie

Non-Persist Cookie - A cookie has expired time Which is called as Non-Persist Cookie 

如何创建cookie?

在Response对象或HttpCookie的帮助下,很容易在Asp.Net中创建一个cookie

    HttpCookie userInfo = new HttpCookie("userInfo");
    userInfo["UserName"] = "Jishan siddique";
    userInfo["UserColor"] = "Black";
    userInfo.Expires.Add(new TimeSpan(0, 1, 0));
    Response.Cookies.Add(userInfo);

答案 2 :(得分:0)

Cookie的共同属性:

1.Domain => Which is used to associate cookies to domain.

2.Secure  => We can enable secure cookie to set true(HTTPs).

3.Value    => We can manipulate individual cookie.

4.Values  => We can manipulate cookies with key/value pair.

5.Expires => Which is used to set expire date for the cookies. 

Cookie的优点:

1.Its clear text so user can able to read it.

2.We can store user preference information on the client machine.

3.Its easy way to maintain.

4.Fast accessing.

Cookie的缺点

1.If user clear cookie information we can't get it back.

2.No security.

3.Each request will have cookie information with page. 

如何清除Cookie信息?

1.我们可以在cookie文件夹

上清除客户端机器上的cookie信息

2.设置expires到cookie对象 userInfo.Expires = DateTime.Now.AddHours(1); 它会在一小时内清除cookie

答案 3 :(得分:-1)

您可以在.Net中使用预定义的命名空间。像这样:

System.Web.HttpContext.Current.Response.addCookie(cookieobject);