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

时间:2009-02-21 23:37:08

标签: c# asp.net

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

6 个答案:

答案 0 :(得分:98)

它们是两个不同的东西,一个 SAVES [响应],另一个 READS [请求]

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

类型的对象 你在save a cookie做的.NET框架中的

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.");

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

retrieve a 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");

<强>记住:

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

这将删除cookie。

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

答案 1 :(得分:40)

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

答案 2 :(得分:19)

编写Cookie时,请使用“响应”,但阅读可能取决于您的情况。通常,您从请求中读取,但如果您的应用程序试图获取刚刚编写或更新的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;
}

答案 3 :(得分:4)

Cookie来自Request.Cookies集合中的浏览器。这是您阅读已发送的cookie的地方。

要将cookie发送回浏览器,请将它们放入Response.Cookies集合中。

如果要删除cookie,则必须通过发送已经过期的cookie来告诉浏览器将其删除。浏览器正在使用客户端计算机的本地时间,因此如果您使用服务器时间来创建日期,请务必减去至少一天以确保它实际上已在客户端本地时间传递。

答案 4 :(得分:3)

当我在.NET中创建或更新cookie时,通常会对请求和响应cookie集合执行此操作。这样,您可以确定如果您尝试在页面请求序列中进一步读取cookie,它将获得正确的信息。

答案 5 :(得分:1)

安德鲁的代码在“AllKeys.Contains”方法中出错。所以我纠正了一点..

public void WriteCookie(string strCookieName, string strCookieValue)
    {
        var hcCookie = new HttpCookie(strCookieName, strCookieValue);
        HttpContext.Current.Response.Cookies.Set(hcCookie);
    }


    public string ReadCookie(string strCookieName)
    {    
        foreach (string strCookie in HttpContext.Current.Response.Cookies.AllKeys)
        {
            if (strCookie == strCookieName)
            {
                return HttpContext.Current.Response.Cookies[strCookie].Value;
            }
        }         

        foreach (string strCookie in HttpContext.Current.Request.Cookies.AllKeys)
        {
            if (strCookie == strCookieName)
            {
                return HttpContext.Current.Request.Cookies[strCookie].Value;
            }
        }

        return null;
    }