Cookies Count

R

rn5a

This is how I am creating & then reading cookies:

<script runat="server">
Sub Page_Load(ByVal obj As Object, ByVal ea As EventArgs)
'create cookies
Response.Cookies("UserName").Value = "Ron"
Response.Cookies("UserName").Expires = "12/31/2008"

Response.Cookies("UserDetails")("FirstName") = "Ronnie"
Response.Cookies("UserDetails")("LastName") = "Nathan"
Response.Cookies("UserDetails")("LastVisitedDate") =
DateTime.Now.ToString("d")
Response.Cookies("UserDetails")("LastVisitedTime") =
DateTime.Now.ToString("T")
Response.Cookies("UserDetails").Expires = "12/31/2008"

'read cookies count
Response.Write(Request.Cookies.Count & " cookies created!
<br>")

'read cookies
Response.Write("Full Name : " & Request.Cookies("UserDetails")
("FirstName") & " " & Request.Cookies("UserDetails")("LastName") &
"<br>")

Response.Write("User Name : " &
Request.Cookies("UserName").Value & "<br>")

Response.Write("Last Visit: " & Request.Cookies("UserDetails")
("LastVisitedDate") & " at " & Request.Cookies("UserDetails")
("LastVisitedTime"))
End Sub
</script>

As such, the cookie gets created successfully. ONLY 1 cookie gets
created but when I run the above code for the first time i.e. when the
cookie doesn't exist, Request.Cookies.Count evaluates to 3 & on
further page refreshes, Request.Cookies.Count evaluates to 5.

How is Request.Cookies.Count evaluating to 3 & 5 when ONLY 1 cookie
gets created (in the Temporary Internet Files folder)?

Thanks
 
J

Juan T. Llibre

re:
!> How is Request.Cookies.Count evaluating to 3 & 5

Request.Cookies.Count doesn't only count the cookies you have explicitly created in the page.
It also counts the ASP.NET cookie(s).

re:
!> when ONLY 1 cookie gets created (in the Temporary Internet Files folder)?
You're actually creating 5 cookies, and storing them in one cookie file.

You can easily loop through all the cookies, and verify this.

Right after your code line which reads :

Response.Write("Last Visit: " & Request.Cookies("UserDetails")("LastVisitedDate") _
& " at " & Request.Cookies("UserDetails")("LastVisitedTime"))

....place this code :

Dim output As New System.Text.StringBuilder()
Dim aCookie As HttpCookie
Dim i As Integer
For i = 0 To Request.Cookies.Count - 1
aCookie = Request.Cookies(i)
output.Append(("Name = " & aCookie.Name + "<br />"))

If aCookie.HasKeys Then
Dim j As Integer
For j = 0 To aCookie.Values.Count - 1
Dim subkeyName as string = Server.HtmlEncode(aCookie.Values.AllKeys(j))
Dim subkeyValue as string = Server.HtmlEncode(aCookie.Values(j))
output.Append(("Subkey name = " & subkeyName + "<br />"))
output.Append(("Subkey value = " & subkeyValue + "<br /><br />"))
Next j
Else
output.Append(("Value = " & Server.HtmlEncode(aCookie.Value) + "<br /><br />"))
End If
Next i
Label1.Text = output.ToString()

---000---

Now, create a form in your html and add a label named Label1...

<html>
<head runat="server">
<title>Cookie Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label id="Label1" runat="server"></asp:Label>
</div>
</form>
</body>
</html>

Now, run your page again.

You will see *all* the cookies you've created, with their subkey names and values.

Count them...and notice that the ASP..NET SessionID cookie is also listed.

You may be able to see cookies created by other applications,
because you did not restrict the cookies' path to the application
in which you're creating the cookies, so you'll see *all* the cookies
which are being created within your default path ( "/" ).
 
R

rn5a

re:
!> How is Request.Cookies.Count evaluating to 3 & 5

Request.Cookies.Count doesn't only count the cookies you have explicitly created in the page.
It also counts the ASP.NET cookie(s).

re:
!> when ONLY 1 cookie gets created (in the Temporary Internet Files folder)?
You're actually creating 5 cookies, and storing them in one cookie file.

You can easily loop through all the cookies, and verify this.

Right after your code line which reads :

Response.Write("Last Visit: " & Request.Cookies("UserDetails")("LastVisitedDate") _
& " at " & Request.Cookies("UserDetails")("LastVisitedTime"))

...place this code :

Dim output As New System.Text.StringBuilder()
Dim aCookie As HttpCookie
Dim i As Integer
For i = 0 To Request.Cookies.Count - 1
aCookie = Request.Cookies(i)
output.Append(("Name = " & aCookie.Name + "<br />"))

If aCookie.HasKeys Then
Dim j As Integer
For j = 0 To aCookie.Values.Count - 1
Dim subkeyName as string = Server.HtmlEncode(aCookie.Values.AllKeys(j))
Dim subkeyValue as string = Server.HtmlEncode(aCookie.Values(j))
output.Append(("Subkey name = " & subkeyName + "<br />"))
output.Append(("Subkey value = " & subkeyValue + "<br /><br />"))
Next j
Else
output.Append(("Value = " & Server.HtmlEncode(aCookie.Value) + "<br /><br />"))
End If
Next i
Label1.Text = output.ToString()

---000---

Now, create a form in your html and add a label named Label1...

<html>
<head runat="server">
<title>Cookie Example</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label id="Label1" runat="server"></asp:Label>
</div>
</form>
</body>
</html>

Now, run your page again.

You will see *all* the cookies you've created, with their subkey names and values.

Count them...and notice that the ASP..NET SessionID cookie is also listed.

You may be able to see cookies created by other applications,
because you did not restrict the cookies' path to the application
in which you're creating the cookies, so you'll see *all* the cookies
which are being created within your default path ( "/" ).
















- Show quoted text -

Thank a lot, Juan, for your input. It was indeed very kind of you to
give me such an elaborate & to-the-point answer. Thanks once again but
I still have got a couple of doubts lingering in my mind.

You already had a look at the code I cited in post #1 that creates &
reads cookies. I created another ASP.NET page & created the same
cookie with the same keys in the traditional ASP.NET way (the code in
post #1 was more of ASP):

<script runat="server">
Sub Page_Load(ByVal obj As Object, ByVal ea As EventArgs)
'create cookies
Dim hCookie As HttpCookie

hCookie = New HttpCookie("UserName")
hCookie.Value = "Ron"
hCookie.Expires = "12/31/2008"
Response.Cookies.Add(hCookie)

hCookie = New HttpCookie("UserDetails")
hCookie.Values.Add("FirstName", "Ronnie")
hCookie.Expires = "12/31/2008"
Response.Cookies.Add(hCookie)

hCookie.Values.Add("LastName", "Nathan")
hCookie.Expires = "12/31/2008"
Response.Cookies.Add(hCookie)

hCookie.Values.Add("LastVisitedDate",
DateTime.Now.ToString("d"))
hCookie.Expires = "12/31/2008"
Response.Cookies.Add(hCookie)

hCookie.Values.Add("LastVisitedTime",
DateTime.Now.ToString("T"))
hCookie.Expires = "12/31/2008"
Response.Cookies.Add(hCookie)

'read cookie count
Response.Write(Request.Cookies.Count & " cookies created!
<br>")

'read cookies
Response.Write("Full Name : " & Request.Cookies("UserDetails")
("FirstName") & " " & Request.Cookies("UserDetails")("LastName") &
"<br>")

Response.Write("User Name : " &
Request.Cookies("UserName").Value & "<br>")

Response.Write("Last Visit: " & Request.Cookies("UserDetails")
("LastVisitedDate") & " at " & Request.Cookies("UserDetails")
("LastVisitedTime"))
End Sub
</script>

The above code creates the same cookie with the same keys & values as
the code in post #1 creates but this time, the cookie count comes to 6
& NOT 3 (which was the cookie count in the code in post #1). Now why
this difference in the cookie count although both the codes, if I am
not mistaken, do the same thing?

Note that I executed the above code AFTER manually DELETING the cookie
that the code in post #1 created & vice-versa.

I also added your code snippet in both the codes. The code in post #1
generated this output (this is only the output your code generated):

------------------------------------------------------------
Name: ASP.NET_SessionId
Value: sxgym055kbqw5t55ywa1hrnw

Name: UserName
Value: Ron

Name: UserDetails
Subkey Name: FirstName
Subkey Value: Ronnie
Subkey Name: LastName
Subkey Value: Nathan
Subkey Name: DateLastVisited
Subkey Value: 9/30/2007
Subkey Name: TimeLastVisited
Subkey Value: 2:03:26 PM
------------------------------------------------------------

whereas the code cited in this post generated this output:

------------------------------------------------------------
Name: ASP.NET_SessionId
Value: ckveunmaaokqqm45fjcp2p2x

Name: UserName
Value: Ron

Name: UserDetails
Subkey Name: FirstName
Subkey Value: Ronnie
Subkey Name: LastName
Subkey Value: Nathan
Subkey Name: LastVisitedDate
Subkey Value: 9/30/2007
Subkey Name: LastVisitedTime
Subkey Value: 2:21:23 PM

Name: UserDetails
Subkey Name: FirstName
Subkey Value: Ronnie
Subkey Name: LastName
Subkey Value: Nathan
Subkey Name: LastVisitedDate
Subkey Value: 9/30/2007
Subkey Name: LastVisitedTime
Subkey Value: 2:21:23 PM

Name: UserDetails
Subkey Name: FirstName
Subkey Value: Ronnie
Subkey Name: LastName
Subkey Value: Nathan
Subkey Name: LastVisitedDate
Subkey Value: 9/30/2007
Subkey Name: LastVisitedTime
Subkey Value: 2:21:23 PM

Name: UserDetails
Subkey Name: FirstName
Subkey Value: Ronnie
Subkey Name: LastName
Subkey Value: Nathan
Subkey Name: LastVisitedDate
Subkey Value: 9/30/2007
Subkey Name: LastVisitedTime
Subkey Value: 2:21:23 PM
------------------------------------------------------------

Since I created 4 keys (FirstName, LastName, LastVisitedDate &
LastVisitedTime) in the cookie named "UserDetails", the same cookie
info got repeated 4 times whereas the code in post #1 generated the
cookie info only once though that code also creates the same 4 keys in
the cookie named "UserDetails". Why this difference?

Also I found that if I get rid of one of the keys created in the
cookie "UserDetails" from the code shown in this post, the cookie
count changes from 6 to 5 & the same cookie info gets repeated 3
times. If I delete another key, then the cookie count comes down to 4
(from 5) & the same cookie info gets repeated 2 times so on & so
forth. So this means that Request.Cookies.Count not only adds the no.
of cookies present but also adds the no. of keys created in the
cookies.......

Ron
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,969
Messages
2,570,161
Members
46,705
Latest member
Stefkari24

Latest Threads

Top