473,406 Members | 2,769 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,406 software developers and data experts.

Set-Cookie header broken in WebHeaderCollection


There seems to be an inconsistency (bug?) in the way the Set-Cookie header
is handled by the WebHeaderCollection. That is, the values of Set-Cookie,
when an Expires is specified, contain the "," character. This seems to be
incorrectly parsed during GetValues().

A simple example shows it best (there are 2 .aspx pages and an output):

AddHeaders.aspx:

<%@ Page language="c#" %>
<html>
<body>
<script language=C# runat=server>
private void Page_Load(object sender, System.EventArgs e)
{
Response.AddHeader("No-comma", "value1");
Response.AddHeader("No-comma", "value2");

Response.AddHeader("Comma", "a,b");
Response.AddHeader("Comma", "c,d");

HttpCookie c1 = new HttpCookie("n1", "v1");
c1.Expires = DateTime.Now.AddHours(4);
Response.Cookies.Add(c1);

HttpCookie c2 = new HttpCookie("n2", "v2");
c2.Expires = DateTime.Now.AddHours(4);
Response.Cookies.Add(c2);
}
</script>
</body>
</html>
GetHeaders.aspx:

<%@ Page language="c#" %>
<HTML>
<body>
<asp:Label id="Label1" runat="server">Label</asp:Label>
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
// make a resquest for the other page (AddHeaders.aspx)
System.Net.HttpWebRequest proxyRequest = (System.Net.HttpWebRequest)
System.Net.WebRequest.Create("http://localhost/WebRequestTest/AddHeaders.asp
x");

System.Net.HttpWebResponse proxyResponse = (System.Net.HttpWebResponse)
proxyRequest.GetResponse();

System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (string key in proxyResponse.Headers.Keys)
{
string[] values = proxyResponse.Headers.GetValues(key);
for (int i=0; i<values.Length; i++)
sb.AppendFormat("header {0}={1}<br>", key, values[i]);
}
Label1.Text = sb.ToString();
}
</script>
</body>
</HTML>
This yields the output:

header Server=Microsoft-IIS/5.1
header Date=Mon, 10 May 2004 16:29:06 GMT
header X-AspNet-Version=1.1.4322
header No-comma=value1
header No-comma=value2
header Comma=a,b
header Comma=c,d
header Set-Cookie=ASP.NET_SessionId=pyum1s45wwc5wdzhndrzyeqh; path=/
header Set-Cookie=n1=v1; expires=Mon
header Set-Cookie=10-May-2004 20:29:06 GMT; path=/
header Set-Cookie=n2=v2; expires=Mon
header Set-Cookie=10-May-2004 20:29:06 GMT; path=/
header Cache-Control=private
header Content-Type=text/html; charset=utf-8
header Content-Length=42

Note how the Set-Cookie multi-value headers have been incorrectly broken up.
They should look like this:

header Set-Cookie=n1=v1; expires=Mon, 10-May-2004 20:29:06 GMT; path=/
header Set-Cookie=n2=v2; expires=Mon, 10-May-2004 20:29:06 GMT; path=/

I know that I can use the CookieContainer to correctly parse out these
values, but I'd rather not (for efficiency); I just want to deal with raw
headers.

Is this a bug, or am I using the framework (1.1) incorrectly?

j
Nov 18 '05 #1
6 7044
WebHeaderCollection is a general purpose class for header manipulation. It
recognizes multivalued headers from the commas delimiting them. It does not
do context sensitive parsing. Calling GetValues() will give you unexpected
results for some headers which have commas in them (eg: Cookie,
WWW-Authenticate etc).

If the server is sending cookies, then on the client you should use
CookieContainer/CookieCollection etc classes (from System.Net namespace).
These apis' will do the parsing for you and you can query the expires etc
properties from that class.

hope this helps.

--
feroze
http://weblogs.asp.net/feroze_daud
============

Remove "user" from the email address to reply to the author.

This posting is provided "AS IS" with no warranties, and confers no rights

Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


"Jason Collins" <jc*************@point2.com> wrote in message
news:#G*************@TK2MSFTNGP12.phx.gbl...

There seems to be an inconsistency (bug?) in the way the Set-Cookie header
is handled by the WebHeaderCollection. That is, the values of Set-Cookie,
when an Expires is specified, contain the "," character. This seems to be
incorrectly parsed during GetValues().

A simple example shows it best (there are 2 .aspx pages and an output):

AddHeaders.aspx:

<%@ Page language="c#" %>
<html>
<body>
<script language=C# runat=server>
private void Page_Load(object sender, System.EventArgs e)
{
Response.AddHeader("No-comma", "value1");
Response.AddHeader("No-comma", "value2");

Response.AddHeader("Comma", "a,b");
Response.AddHeader("Comma", "c,d");

HttpCookie c1 = new HttpCookie("n1", "v1");
c1.Expires = DateTime.Now.AddHours(4);
Response.Cookies.Add(c1);

HttpCookie c2 = new HttpCookie("n2", "v2");
c2.Expires = DateTime.Now.AddHours(4);
Response.Cookies.Add(c2);
}
</script>
</body>
</html>
GetHeaders.aspx:

<%@ Page language="c#" %>
<HTML>
<body>
<asp:Label id="Label1" runat="server">Label</asp:Label>
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
// make a resquest for the other page (AddHeaders.aspx)
System.Net.HttpWebRequest proxyRequest = (System.Net.HttpWebRequest)
System.Net.WebRequest.Create("http://localhost/WebRequestTest/AddHeaders.asp x");

System.Net.HttpWebResponse proxyResponse = (System.Net.HttpWebResponse) proxyRequest.GetResponse();

System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (string key in proxyResponse.Headers.Keys)
{
string[] values = proxyResponse.Headers.GetValues(key);
for (int i=0; i<values.Length; i++)
sb.AppendFormat("header {0}={1}<br>", key, values[i]);
}
Label1.Text = sb.ToString();
}
</script>
</body>
</HTML>
This yields the output:

header Server=Microsoft-IIS/5.1
header Date=Mon, 10 May 2004 16:29:06 GMT
header X-AspNet-Version=1.1.4322
header No-comma=value1
header No-comma=value2
header Comma=a,b
header Comma=c,d
header Set-Cookie=ASP.NET_SessionId=pyum1s45wwc5wdzhndrzyeqh; path=/
header Set-Cookie=n1=v1; expires=Mon
header Set-Cookie=10-May-2004 20:29:06 GMT; path=/
header Set-Cookie=n2=v2; expires=Mon
header Set-Cookie=10-May-2004 20:29:06 GMT; path=/
header Cache-Control=private
header Content-Type=text/html; charset=utf-8
header Content-Length=42

Note how the Set-Cookie multi-value headers have been incorrectly broken up. They should look like this:

header Set-Cookie=n1=v1; expires=Mon, 10-May-2004 20:29:06 GMT; path=/
header Set-Cookie=n2=v2; expires=Mon, 10-May-2004 20:29:06 GMT; path=/

I know that I can use the CookieContainer to correctly parse out these
values, but I'd rather not (for efficiency); I just want to deal with raw
headers.

Is this a bug, or am I using the framework (1.1) incorrectly?

j

Nov 18 '05 #2

Yeah, I'm currently using the CookieContainer. It's just that I don't
actually want/need to interact with the header values; I am building an HTTP
proxy and would just like to transfer the headers in the most lightweight
way possible.

I can likely live with the CookieContainer performance hit.

This just seemed like it might be a bug and wanted it brought to someone's
attention.

j

"Feroze [MSFT]" <fe*****@online.microsoft.com> wrote in message
news:40********@news.microsoft.com...
WebHeaderCollection is a general purpose class for header manipulation. It
recognizes multivalued headers from the commas delimiting them. It does not do context sensitive parsing. Calling GetValues() will give you unexpected
results for some headers which have commas in them (eg: Cookie,
WWW-Authenticate etc).

If the server is sending cookies, then on the client you should use
CookieContainer/CookieCollection etc classes (from System.Net namespace).
These apis' will do the parsing for you and you can query the expires etc
properties from that class.

hope this helps.

--
feroze
http://weblogs.asp.net/feroze_daud
============

Remove "user" from the email address to reply to the author.

This posting is provided "AS IS" with no warranties, and confers no rights

Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


"Jason Collins" <jc*************@point2.com> wrote in message
news:#G*************@TK2MSFTNGP12.phx.gbl...

There seems to be an inconsistency (bug?) in the way the Set-Cookie header is handled by the WebHeaderCollection. That is, the values of Set-Cookie, when an Expires is specified, contain the "," character. This seems to be incorrectly parsed during GetValues().

A simple example shows it best (there are 2 .aspx pages and an output):

AddHeaders.aspx:

<%@ Page language="c#" %>
<html>
<body>
<script language=C# runat=server>
private void Page_Load(object sender, System.EventArgs e)
{
Response.AddHeader("No-comma", "value1");
Response.AddHeader("No-comma", "value2");

Response.AddHeader("Comma", "a,b");
Response.AddHeader("Comma", "c,d");

HttpCookie c1 = new HttpCookie("n1", "v1");
c1.Expires = DateTime.Now.AddHours(4);
Response.Cookies.Add(c1);

HttpCookie c2 = new HttpCookie("n2", "v2");
c2.Expires = DateTime.Now.AddHours(4);
Response.Cookies.Add(c2);
}
</script>
</body>
</html>
GetHeaders.aspx:

<%@ Page language="c#" %>
<HTML>
<body>
<asp:Label id="Label1" runat="server">Label</asp:Label>
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
// make a resquest for the other page (AddHeaders.aspx)
System.Net.HttpWebRequest proxyRequest = (System.Net.HttpWebRequest)

System.Net.WebRequest.Create("http://localhost/WebRequestTest/AddHeaders.asp
x");

System.Net.HttpWebResponse proxyResponse =

(System.Net.HttpWebResponse)
proxyRequest.GetResponse();

System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (string key in proxyResponse.Headers.Keys)
{
string[] values = proxyResponse.Headers.GetValues(key);
for (int i=0; i<values.Length; i++)
sb.AppendFormat("header {0}={1}<br>", key, values[i]);
}
Label1.Text = sb.ToString();
}
</script>
</body>
</HTML>
This yields the output:

header Server=Microsoft-IIS/5.1
header Date=Mon, 10 May 2004 16:29:06 GMT
header X-AspNet-Version=1.1.4322
header No-comma=value1
header No-comma=value2
header Comma=a,b
header Comma=c,d
header Set-Cookie=ASP.NET_SessionId=pyum1s45wwc5wdzhndrzyeqh; path=/
header Set-Cookie=n1=v1; expires=Mon
header Set-Cookie=10-May-2004 20:29:06 GMT; path=/
header Set-Cookie=n2=v2; expires=Mon
header Set-Cookie=10-May-2004 20:29:06 GMT; path=/
header Cache-Control=private
header Content-Type=text/html; charset=utf-8
header Content-Length=42

Note how the Set-Cookie multi-value headers have been incorrectly broken

up.
They should look like this:

header Set-Cookie=n1=v1; expires=Mon, 10-May-2004 20:29:06 GMT; path=/
header Set-Cookie=n2=v2; expires=Mon, 10-May-2004 20:29:06 GMT; path=/

I know that I can use the CookieContainer to correctly parse out these
values, but I'd rather not (for efficiency); I just want to deal with raw headers.

Is this a bug, or am I using the framework (1.1) incorrectly?

j


Nov 18 '05 #3
If you just want to forward headers, why dont you just query them & set them
on the outgoing request ?

foreach(string s in headers.Keys) {
Console.WriteLine(s + ": " + headers[s]);
}

This will give you all the header lines in the header collection.

--
feroze
http://weblogs.asp.net/feroze_daud
============

Remove "user" from the email address to reply to the author.

This posting is provided "AS IS" with no warranties, and confers no rights

Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


"Jason Collins" <jc*************@point2.com> wrote in message
news:uG**************@TK2MSFTNGP10.phx.gbl...

Yeah, I'm currently using the CookieContainer. It's just that I don't
actually want/need to interact with the header values; I am building an HTTP proxy and would just like to transfer the headers in the most lightweight
way possible.

I can likely live with the CookieContainer performance hit.

This just seemed like it might be a bug and wanted it brought to someone's
attention.

j

"Feroze [MSFT]" <fe*****@online.microsoft.com> wrote in message
news:40********@news.microsoft.com...
WebHeaderCollection is a general purpose class for header manipulation. It
recognizes multivalued headers from the commas delimiting them. It does

not
do context sensitive parsing. Calling GetValues() will give you unexpected results for some headers which have commas in them (eg: Cookie,
WWW-Authenticate etc).

If the server is sending cookies, then on the client you should use
CookieContainer/CookieCollection etc classes (from System.Net namespace). These apis' will do the parsing for you and you can query the expires etc properties from that class.

hope this helps.

--
feroze
http://weblogs.asp.net/feroze_daud
============

Remove "user" from the email address to reply to the author.

This posting is provided "AS IS" with no warranties, and confers no rights
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


"Jason Collins" <jc*************@point2.com> wrote in message
news:#G*************@TK2MSFTNGP12.phx.gbl...

There seems to be an inconsistency (bug?) in the way the Set-Cookie header is handled by the WebHeaderCollection. That is, the values of Set-Cookie, when an Expires is specified, contain the "," character. This seems to be incorrectly parsed during GetValues().

A simple example shows it best (there are 2 .aspx pages and an output):
AddHeaders.aspx:

<%@ Page language="c#" %>
<html>
<body>
<script language=C# runat=server>
private void Page_Load(object sender, System.EventArgs e)
{
Response.AddHeader("No-comma", "value1");
Response.AddHeader("No-comma", "value2");

Response.AddHeader("Comma", "a,b");
Response.AddHeader("Comma", "c,d");

HttpCookie c1 = new HttpCookie("n1", "v1");
c1.Expires = DateTime.Now.AddHours(4);
Response.Cookies.Add(c1);

HttpCookie c2 = new HttpCookie("n2", "v2");
c2.Expires = DateTime.Now.AddHours(4);
Response.Cookies.Add(c2);
}
</script>
</body>
</html>
GetHeaders.aspx:

<%@ Page language="c#" %>
<HTML>
<body>
<asp:Label id="Label1" runat="server">Label</asp:Label>
<script language="C#" runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
// make a resquest for the other page (AddHeaders.aspx)
System.Net.HttpWebRequest proxyRequest = (System.Net.HttpWebRequest)

System.Net.WebRequest.Create("http://localhost/WebRequestTest/AddHeaders.asp
x");

System.Net.HttpWebResponse proxyResponse =

(System.Net.HttpWebResponse)
proxyRequest.GetResponse();

System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (string key in proxyResponse.Headers.Keys)
{
string[] values = proxyResponse.Headers.GetValues(key);
for (int i=0; i<values.Length; i++)
sb.AppendFormat("header {0}={1}<br>", key, values[i]);
}
Label1.Text = sb.ToString();
}
</script>
</body>
</HTML>
This yields the output:

header Server=Microsoft-IIS/5.1
header Date=Mon, 10 May 2004 16:29:06 GMT
header X-AspNet-Version=1.1.4322
header No-comma=value1
header No-comma=value2
header Comma=a,b
header Comma=c,d
header Set-Cookie=ASP.NET_SessionId=pyum1s45wwc5wdzhndrzyeqh; path=/
header Set-Cookie=n1=v1; expires=Mon
header Set-Cookie=10-May-2004 20:29:06 GMT; path=/
header Set-Cookie=n2=v2; expires=Mon
header Set-Cookie=10-May-2004 20:29:06 GMT; path=/
header Cache-Control=private
header Content-Type=text/html; charset=utf-8
header Content-Length=42

Note how the Set-Cookie multi-value headers have been incorrectly
broken up.
They should look like this:

header Set-Cookie=n1=v1; expires=Mon, 10-May-2004 20:29:06 GMT; path=/
header Set-Cookie=n2=v2; expires=Mon, 10-May-2004 20:29:06 GMT; path=/

I know that I can use the CookieContainer to correctly parse out these
values, but I'd rather not (for efficiency); I just want to deal with

raw headers.

Is this a bug, or am I using the framework (1.1) incorrectly?

j



Nov 18 '05 #4

If I do this, all the Set-Cookie headers are munged into a single,
comma-separated Set-Cookie header like this:

Set-Cookie=n1=v1; expires=Mon, 10-May-2004 20:29:06 GMT; path=/, n2=v2;
expires=Mon, 10-May-2004 20:29:06 GMT; path=/

Internet Explorer 6 (the only one I've tested) does not react well to this
header. That is, it only sets the first cookie in the list, the others are
ignored.

So I need to preserve the multiple Set-Cookie headers. Grabbing headers[s]
munges them together.

j

"Feroze [MSFT]" <fe*****@online.microsoft.com> wrote in message
news:40********@news.microsoft.com...
If you just want to forward headers, why dont you just query them & set them on the outgoing request ?

foreach(string s in headers.Keys) {
Console.WriteLine(s + ": " + headers[s]);
}

This will give you all the header lines in the header collection.

--
feroze
http://weblogs.asp.net/feroze_daud
============

Remove "user" from the email address to reply to the author.

This posting is provided "AS IS" with no warranties, and confers no rights

Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


"Jason Collins" <jc*************@point2.com> wrote in message
news:uG**************@TK2MSFTNGP10.phx.gbl...

Yeah, I'm currently using the CookieContainer. It's just that I don't
actually want/need to interact with the header values; I am building an HTTP
proxy and would just like to transfer the headers in the most lightweight
way possible.

I can likely live with the CookieContainer performance hit.

This just seemed like it might be a bug and wanted it brought to someone's attention.

j

"Feroze [MSFT]" <fe*****@online.microsoft.com> wrote in message
news:40********@news.microsoft.com...
WebHeaderCollection is a general purpose class for header manipulation. It recognizes multivalued headers from the commas delimiting them. It
does
not
do context sensitive parsing. Calling GetValues() will give you unexpected results for some headers which have commas in them (eg: Cookie,
WWW-Authenticate etc).

If the server is sending cookies, then on the client you should use
CookieContainer/CookieCollection etc classes (from System.Net namespace). These apis' will do the parsing for you and you can query the expires etc properties from that class.

hope this helps.

--
feroze
http://weblogs.asp.net/feroze_daud
============

Remove "user" from the email address to reply to the author.

This posting is provided "AS IS" with no warranties, and confers no rights
Use of included script samples are subject to the terms specified at
http://www.microsoft.com/info/cpyright.htm


"Jason Collins" <jc*************@point2.com> wrote in message
news:#G*************@TK2MSFTNGP12.phx.gbl...
>
> There seems to be an inconsistency (bug?) in the way the Set-Cookie

header
> is handled by the WebHeaderCollection. That is, the values of

Set-Cookie,
> when an Expires is specified, contain the "," character. This seems
to be
> incorrectly parsed during GetValues().
>
> A simple example shows it best (there are 2 .aspx pages and an output): >
> AddHeaders.aspx:
>
> <%@ Page language="c#" %>
> <html>
> <body>
> <script language=C# runat=server>
> private void Page_Load(object sender, System.EventArgs e)
> {
> Response.AddHeader("No-comma", "value1");
> Response.AddHeader("No-comma", "value2");
>
> Response.AddHeader("Comma", "a,b");
> Response.AddHeader("Comma", "c,d");
>
> HttpCookie c1 = new HttpCookie("n1", "v1");
> c1.Expires = DateTime.Now.AddHours(4);
> Response.Cookies.Add(c1);
>
> HttpCookie c2 = new HttpCookie("n2", "v2");
> c2.Expires = DateTime.Now.AddHours(4);
> Response.Cookies.Add(c2);
> }
> </script>
> </body>
> </html>
>
>
> GetHeaders.aspx:
>
> <%@ Page language="c#" %>
> <HTML>
> <body>
> <asp:Label id="Label1" runat="server">Label</asp:Label>
> <script language="C#" runat="server">
> private void Page_Load(object sender, System.EventArgs e)
> {
> // make a resquest for the other page (AddHeaders.aspx)
> System.Net.HttpWebRequest proxyRequest = (System.Net.HttpWebRequest) >

System.Net.WebRequest.Create("http://localhost/WebRequestTest/AddHeaders.asp > x");
>
> System.Net.HttpWebResponse proxyResponse =
(System.Net.HttpWebResponse)
> proxyRequest.GetResponse();
>
> System.Text.StringBuilder sb = new System.Text.StringBuilder();
> foreach (string key in proxyResponse.Headers.Keys)
> {
> string[] values = proxyResponse.Headers.GetValues(key);
> for (int i=0; i<values.Length; i++)
> sb.AppendFormat("header {0}={1}<br>", key, values[i]);
> }
> Label1.Text = sb.ToString();
> }
> </script>
> </body>
> </HTML>
>
>
> This yields the output:
>
> header Server=Microsoft-IIS/5.1
> header Date=Mon, 10 May 2004 16:29:06 GMT
> header X-AspNet-Version=1.1.4322
> header No-comma=value1
> header No-comma=value2
> header Comma=a,b
> header Comma=c,d
> header Set-Cookie=ASP.NET_SessionId=pyum1s45wwc5wdzhndrzyeqh; path=/
> header Set-Cookie=n1=v1; expires=Mon
> header Set-Cookie=10-May-2004 20:29:06 GMT; path=/
> header Set-Cookie=n2=v2; expires=Mon
> header Set-Cookie=10-May-2004 20:29:06 GMT; path=/
> header Cache-Control=private
> header Content-Type=text/html; charset=utf-8
> header Content-Length=42
>
> Note how the Set-Cookie multi-value headers have been incorrectly broken up.
> They should look like this:
>
> header Set-Cookie=n1=v1; expires=Mon, 10-May-2004 20:29:06 GMT; path=/ > header Set-Cookie=n2=v2; expires=Mon, 10-May-2004 20:29:06 GMT; path=/ >
> I know that I can use the CookieContainer to correctly parse out these > values, but I'd rather not (for efficiency); I just want to deal

with raw
> headers.
>
> Is this a bug, or am I using the framework (1.1) incorrectly?
>
> j
>
>



Nov 18 '05 #5
Hi Jason,

I think Feroze's suggestion are correct. The HttpWebRequest.Headers
property is infact a normal NameValueCollection which is not particularly
deinfed for any specified Items such as cookies. And the
"GetValues" method will treat the whole string value of the certain key as
a normal text and split it via comma, that's why if you use GetValues, when
encountering the cookie value, the cookie value will be broken(because it
contains comma between cookie value). I think this is a apparent behavior
of a NameValueCollection.

So if we want to let the collection automaticaly do such checking
operations for us, we'd better use the CookieCollection instead. Otherwise,
we have to manually do the string spliting. Do you thinks so?

If you still have anyother concerns, please feel free to post here. Thanks.

Regards,

Steven Cheng
Microsoft Online Support

Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)

Get Preview at ASP.NET whidbey
http://msdn.microsoft.com/asp.net/whidbey/default.aspx
Nov 18 '05 #6

Like I said a couple of posts back, I suppose I will just live with the
overhead of CookieContainer.

Note, though, that WebHeaderCollection overrides NameValueCollection's
GetValues() and uses a parser that is particular to Set-Cookie
(System.Net.HeaderInfoTable.MultiParser). An alternative parser could be
developed (e.g., in Whidbey) that would better handle this situation.

j

"Steven Cheng[MSFT]" <v-******@online.microsoft.com> wrote in message
news:tm*************@cpmsftngxa10.phx.gbl...
Hi Jason,

I think Feroze's suggestion are correct. The HttpWebRequest.Headers
property is infact a normal NameValueCollection which is not particularly
deinfed for any specified Items such as cookies. And the
"GetValues" method will treat the whole string value of the certain key as
a normal text and split it via comma, that's why if you use GetValues, when encountering the cookie value, the cookie value will be broken(because it
contains comma between cookie value). I think this is a apparent behavior
of a NameValueCollection.

So if we want to let the collection automaticaly do such checking
operations for us, we'd better use the CookieCollection instead. Otherwise, we have to manually do the string spliting. Do you thinks so?

If you still have anyother concerns, please feel free to post here. Thanks.
Regards,

Steven Cheng
Microsoft Online Support

Get Secure! www.microsoft.com/security
(This posting is provided "AS IS", with no warranties, and confers no
rights.)

Get Preview at ASP.NET whidbey
http://msdn.microsoft.com/asp.net/whidbey/default.aspx

Nov 18 '05 #7

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

26
by: Michael Klatt | last post by:
I am trying to write an iterator for a std::set that allows the iterator target to be modified. Here is some relvant code: template <class Set> // Set is an instance of std::set<> class...
7
by: William Payne | last post by:
Hello, I have a variable of type unsigned long. It has a number of bits set (with set I mean they equal one). I need to determine those bits and their position and create new numbers from them. For...
11
by: snnn | last post by:
On the book <Generic Programming and the STL>( Matthew . H . Austern ),this function is defined as iterator set::begin() const. However, why should a const object returns a non-const iterator?...
3
by: uclamathguy | last post by:
I am working on connected component analysis, but that is irrelevant. I have a mapping containing ints as the keys and sets of ints as the "values." Given an integer, I need to iterate through...
7
by: Prawit Chaivong | last post by:
Hi, gurus Is it safe to do this in function? 'return &(*iterator)'; And iterator is std::set<something>::iterator Regards,
11
by: ucasesoftware | last post by:
If i have this property Dim m_name as string Property name() as string Get return m_name end Get Set (byval Value as string) m_name = Value
4
by: Yuri CHUANG | last post by:
This is a example from a textbook,but there are some strange error that I don't understand.Could anyone give me some help to realize the operations on set.Thank you very much:-) (I compile it with...
22
by: bearophileHUGS | last post by:
>From this interesting blog entry by Lawrence Oluyede: http://www.oluyede.org/blog/2006/07/05/europython-day-2/ and the Py3.0 PEPs, I think the people working on Py3.0 are doing a good job, I am...
9
by: Prateek | last post by:
I have a bit of a specialized request. I'm reading a table of strings (specifically fixed length 36 char uuids generated via uuid.uuid4() in the standard library) from a file and creating a set...
3
by: kuangye | last post by:
Hi, all. Is there any library supporting set operation such as union, intersection, difference on sets of integer numbers.
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: nemocccc | last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.