W
Wysiwyg
After a server created cookie is processed on the client I want it removed,
cleared, or expired in the javascript block but have been unable to do this.
If I set a cookie value in the server code behind and don't use a domain
then I can not change or remove that cookie's value on the client. If I
subsequently create the cookie again in the codebehind then I actually end
up with TWO cookies with the same name in the response. The cookie created
can be read at it's original server created value but I can't change it on
the client side.
This isn't a problem if an actual domain value is present, the cookie can be
removed or changed as I'd expect, but that isn't practical or desired to use
a domain in this case. A client session will only see the cookie that has a
domain if 1) the domain has at least one period in it and 2) the host
address of the session ends with whatever is in the domain value. That means
"localhost" isn't a valid value for the domain which makes it a pain for
development.
I create the cookie on the server like so...
HttpCookie cookie = new HttpCookie("CookieNameHere",strValue);
Response.Cookies.Add(cookie);
I attempt to delete it on the client in Javascript with a statement like
this:
document.cookie = 'CookieNameHere=';
I've also tried variations that specify the domain= and expires= values with
no difference.
When I look at the actual cookies in the Visual Studio debug by adding the
cookie object in the watch list I see the System.Web.HttpCookie object with
two sets of values. The usual properties for name, path, domain,
stringValue, etc. are there twice. One set has a _ prefix for each property,
i.e. _domain. The "_domain" is set to null but the "domain" property is an
empty string. Changes in the client javascript code affect the _ prefixed
values, so _stringValue is correctly cleared, but the original server set
stringValue (with no prefix) is untouched and is actually used if the cookie
is read on the client side in the future. If I use an actual domain for the
cookie then the two values are the same.
After the javascript statement which is meant to clear the cookie I see two
cookie values in the Visual Studio debugger. One with a null _stringValue
and a null _domain and one with the original string value and a domain = ''.
If the value of the cookie is subsequently checked the original value is
still there and is used.
I've even tried deleting the request and/or response cookie after the
initial render of the page where the cookie is used but that doesn't, and
isn't supposed to, affect the client cookie anyway.
Setting cookie.Domain = string.empty in the code behind doesn't change
anything and setting cookie.Domain = null in the code behind doesn't do
anything different either.
Has anyone run into this problem before? Is there some way I haven't
mentioned to clear a cookie? Is there a workaround known?
Thanks for any help!
Bill
cleared, or expired in the javascript block but have been unable to do this.
If I set a cookie value in the server code behind and don't use a domain
then I can not change or remove that cookie's value on the client. If I
subsequently create the cookie again in the codebehind then I actually end
up with TWO cookies with the same name in the response. The cookie created
can be read at it's original server created value but I can't change it on
the client side.
This isn't a problem if an actual domain value is present, the cookie can be
removed or changed as I'd expect, but that isn't practical or desired to use
a domain in this case. A client session will only see the cookie that has a
domain if 1) the domain has at least one period in it and 2) the host
address of the session ends with whatever is in the domain value. That means
"localhost" isn't a valid value for the domain which makes it a pain for
development.
I create the cookie on the server like so...
HttpCookie cookie = new HttpCookie("CookieNameHere",strValue);
Response.Cookies.Add(cookie);
I attempt to delete it on the client in Javascript with a statement like
this:
document.cookie = 'CookieNameHere=';
I've also tried variations that specify the domain= and expires= values with
no difference.
When I look at the actual cookies in the Visual Studio debug by adding the
cookie object in the watch list I see the System.Web.HttpCookie object with
two sets of values. The usual properties for name, path, domain,
stringValue, etc. are there twice. One set has a _ prefix for each property,
i.e. _domain. The "_domain" is set to null but the "domain" property is an
empty string. Changes in the client javascript code affect the _ prefixed
values, so _stringValue is correctly cleared, but the original server set
stringValue (with no prefix) is untouched and is actually used if the cookie
is read on the client side in the future. If I use an actual domain for the
cookie then the two values are the same.
After the javascript statement which is meant to clear the cookie I see two
cookie values in the Visual Studio debugger. One with a null _stringValue
and a null _domain and one with the original string value and a domain = ''.
If the value of the cookie is subsequently checked the original value is
still there and is used.
I've even tried deleting the request and/or response cookie after the
initial render of the page where the cookie is used but that doesn't, and
isn't supposed to, affect the client cookie anyway.
Setting cookie.Domain = string.empty in the code behind doesn't change
anything and setting cookie.Domain = null in the code behind doesn't do
anything different either.
Has anyone run into this problem before? Is there some way I haven't
mentioned to clear a cookie? Is there a workaround known?
Thanks for any help!
Bill