何时使用Request.Cookies而不是Response.Cookies?

Gur*_*epS 59 c# asp.net

我是否在页面事件(例如加载)时使用响应,因为这是来自ASP.NET的响应,并且在按下按钮时请求,因为这是对ASP.NET进行处理的响应?或者还有更多吗?

bal*_*dre 99

它们是两个不同的东西,一个是SAVES [Response],另一个是READS [Request]

在Cookie(信息学说话):)你保存一个小文件一段时间,其中包含类型字符串的对象

在.NET框架中,您保存一个cookie:

HttpCookie myCookie = new HttpCookie("MyTestCookie");
DateTime now = DateTime.Now;

// Set the cookie value.
myCookie.Value = now.ToString();
// Set the cookie expiration date.
myCookie.Expires = now.AddMinutes(1);

// Add the cookie.
Response.Cookies.Add(myCookie);

Response.Write("<p> The cookie has been written.");
Run Code Online (Sandbox Code Playgroud)

你写了一个可用一分钟的cookie ...通常我们现在这样做.AddMonth(1)所以你可以保存一整个月的cookie.

检索cookie,请使用请求(您正在请求),如:

HttpCookie myCookie = new HttpCookie("MyTestCookie");
myCookie = Request.Cookies["MyTestCookie"];

// Read the cookie information and display it.
if (myCookie != null)
   Response.Write("<p>"+ myCookie.Name + "<p>"+ myCookie.Value);
else
   Response.Write("not found");
Run Code Online (Sandbox Code Playgroud)

记得:

要删除Cookie,没有直接代码,诀窍是保存相同的Cookie名称,其中包含已经过的截止日期,例如now.AddMinutes(-1)

这将删除cookie.

如您所见,每次cookie的生命周期到期时,该文件都会自动从系统中删除.

  • +1我没有意识到你必须重新保存cookie才能更新到期日 (7认同)
  • 这不支持读取刚刚在响应中发送的cookie,在这种情况下,您需要使用`Response.Cookies` (2认同)

tva*_*son 40

在Web应用程序中,请求来自浏览器,响应是服务器发回的内容.从浏览器验证cookie或cookie数据时,您应该使用Request.Cookies.当您构建要发送到浏览器的cookie时,您需要将它们添加到Response.Cookies.


and*_*eer 19

在编写cookie时,请使用Response,但阅读可能取决于您的情况.通常,您从请求中读取,但如果您的应用程序试图获取刚刚编写或更新的cookie并且未发生浏览器往返,则可能需要从响应中读取它.

我已经使用这种模式一段时间了,它对我很有用.

public void WriteCookie(string name, string value)
{
    var cookie = new HttpCookie(name, value);
    HttpContext.Current.Response.Cookies.Set(cookie);
}


public string ReadCookie(string name)
{
    if (HttpContext.Current.Response.Cookies.AllKeys.Contains(name))
    {
        var cookie = HttpContext.Current.Response.Cookies[name];
        return cookie.Value;
    }

    if (HttpContext.Current.Request.Cookies.AllKeys.Contains(name))
    {
        var cookie = HttpContext.Current.Request.Cookies[name];
        return cookie.Value;
    }

    return null;
}
Run Code Online (Sandbox Code Playgroud)

  • 另一种但同等的方法是在保存时简单地将cookie写入Response.Cookies和Request.Cookies集合.这样,循环中的任何其他逻辑都可以读取您刚刚设置的cookie,而无需查看Response对象. (4认同)