cookie problems in asp.net. Values reverting after

2019-07-03 03:54发布

I have spent sooooo many hours on this it is insane.

I have a page base class which contains a "setcookie" function and this is basically this:

        Dim context As HttpContext = System.Web.HttpContext.Current

        If context.Request.Cookies(cookieName) Is Nothing Then
            Dim cookie As HttpCookie
            cookie.Value = cookieValue
            cookie.Expires = DateTime.Now.AddDays(7)
            context.Response.Cookies.Add(cookie)
        Else
            Dim cookie As HttpCookie = context.Request.Cookies(cookieName)
            cookie.Expires = DateTime.Now.AddDays(7)
            cookie.Value = cookieValue
        End If

This function is called by a simple aspx page. As this is in a test environment there is a previous value of "123" in the cookie I'm using. If I use the debug and watch window, I see the value change to "168" successfully.

I have a debug break point on a line which is:

           Response.Redirect("overview.aspx", False)

When the break point is active, the values in the watch window are:

    currProjectID   168 Integer
    HttpContext.Current.Request.Cookies("currProjectID").Value  "168"   String

(currProjectID is a property in the basepage class that gets/sets the cookie with the function above)

Now, the second I step off the breakpoint line above using "F10" the values of the variable change!

    HttpContext.Current.Request.Cookies("currProjectID").Value  "123"   String
    currProjectID   123 Integer

This is insane! The code goes nowhere, the debug point is immediately under the "response.redirect" line above and yet the values have immediately changed to what they were before! Nothing has gone near the "setcookie" routine so please please please would someone save my insanity and tell me what is going wrong!?

1条回答
爷的心禁止访问
2楼-- · 2019-07-03 04:31

You have to: - get the cookie from request - update cookie - send cookie in response

If you dont sent cookie in the response, browser wouldn't know anything about the change !!! Cookies aren't that clever to update themselves.

Hope it helps.

UPDATE

var cookieDetails = Request.Cookies["yourCookie"];
if (cookieDetails != null)
{
    cookieDetails.Values["someValue"] = valueToAssign;
}
else
{
    cookieDetails = new HttpCookie("yourCookie");
    cookieDetails.Values.Add("someValue", valueToAssign);
}
Response.Cookies.Add(cookieDetails);

this example sets a cookie. as you can see the first bit is checking if cookie exists and the second just creates new cookie.

you are missing the last bit which sends the cookie back to browser

Response.Cookies.Add(cookieDetails);

Hope it helps.

查看更多
登录 后发表回答