|
Home > Archive > IIS ASP > April 2006 > Session Variable for Shopping Cart
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
Session Variable for Shopping Cart
|
|
| TRB_NV 2006-04-27, 7:51 am |
| I'm losing information from my Session when I change pages or start the same
page over again. I simplified the code so the example is really clear. The
sample code that follows is supposed to generate a random number and put it
into an Array and store it in the Session variable and then when it runs the
next time, generate another random number and display the entire Array
contents, by pulling the information out of the Session. I'd greatly
appreciate someone with fresh eyes taking a look at this code. Thanks.
<%@ LANGUAGE="VBSCRIPT" %>
<%
if Request.Form("clear") = "true" then
Session.Contents.Remove("ShoppingCart")
Session("ItemCount") = 0
clearcart = ""
end if
dim cart(999,9)
Randomize Timer
r1 = Rnd
r1 = r1 * 1000000
intOrderID = 1000000 + Int (r1)
intItemCount = Session("ItemCount")
if intItemCount = 0 then
intItemCount = 1
Session("ItemCount") = intItemCount
else
intItemCount = intItemCount + 1
Session("ItemCount") = intItemCount
end if
Session("ItemCount") = intItemCount
cart(intItemCount,1)=intOrderID
Session("ShoppingCart")=cart
xcart=Session("ShoppingCart")
for x = 1 to intItemCount
response.write x & " " & xcart(x,1) & "<br>"
next
%>
<form action="array.asp" method="post">
<input type="hidden" name="clear" value="true">
<input type="Submit" name="Submit" value="Clear Shopping Cart">
</form>
<form action="array.asp" method="post">
<input type="hidden" name="clear" value="false">
<input type="Submit" name="Submit" value="Reload">
</form>
| |
| Anthony Jones 2006-04-27, 7:51 am |
|
"TRB_NV" <TRB_NV@hotmail.com> wrote in message
news:O0bYg4gXGHA.196@TK2MSFTNGP04.phx.gbl...
> I'm losing information from my Session when I change pages or start the
same
> page over again. I simplified the code so the example is really clear.
The
> sample code that follows is supposed to generate a random number and put
it
> into an Array and store it in the Session variable and then when it runs
the
> next time, generate another random number and display the entire Array
> contents, by pulling the information out of the Session. I'd greatly
> appreciate someone with fresh eyes taking a look at this code. Thanks.
>
> <%@ LANGUAGE="VBSCRIPT" %>
>
> <%
> if Request.Form("clear") = "true" then
> Session.Contents.Remove("ShoppingCart")
> Session("ItemCount") = 0
> clearcart = ""
> end if
>
> dim cart(999,9)
>
> Randomize Timer
> r1 = Rnd
> r1 = r1 * 1000000
> intOrderID = 1000000 + Int (r1)
>
> intItemCount = Session("ItemCount")
>
> if intItemCount = 0 then
> intItemCount = 1
> Session("ItemCount") = intItemCount
> else
> intItemCount = intItemCount + 1
> Session("ItemCount") = intItemCount
> end if
>
> Session("ItemCount") = intItemCount
>
> cart(intItemCount,1)=intOrderID
> Session("ShoppingCart")=cart
>
> xcart=Session("ShoppingCart")
>
> for x = 1 to intItemCount
> response.write x & " " & xcart(x,1) & "<br>"
> next
>
> %>
> <form action="array.asp" method="post">
> <input type="hidden" name="clear" value="true">
> <input type="Submit" name="Submit" value="Clear Shopping Cart">
> </form>
> <form action="array.asp" method="post">
> <input type="hidden" name="clear" value="false">
> <input type="Submit" name="Submit" value="Reload">
> </form>
>
You have a hidden field whose value is always true. Hence the code at the
top of your page that resets everything always runs.
| |
| TRB_NV 2006-04-27, 7:51 am |
| Remarked out the part about clearing the Session contents, but I'm still not
getting the data from the Array I stored in it:
'if Request.Form("clear") = "true" then
' Session.Contents.Remove("ShoppingCart")
' Session("ItemCount") = 0
' clearcart = ""
'end if
From everything I've read, it appears that I can store an Array in a Session
variable and recall it. Some how it's not working properly.
| |
| Anthony Jones 2006-04-27, 7:51 am |
|
"TRB_NV" <TRB_NV@hotmail.com> wrote in message
news:%239%231t2lXGHA.508@TK2MSFTNGP02.phx.gbl...
> Remarked out the part about clearing the Session contents, but I'm still
not
> getting the data from the Array I stored in it:
>
> 'if Request.Form("clear") = "true" then
> ' Session.Contents.Remove("ShoppingCart")
> ' Session("ItemCount") = 0
> ' clearcart = ""
> 'end if
>
> From everything I've read, it appears that I can store an Array in a
Session
> variable and recall it. Some how it's not working properly.
>
>
You've got these lines in your code too
Session("ShoppingCart")=cart
xcart=Session("ShoppingCart")
Are you saying xcart does contain the same data as cart?
What if you change this to:-
xcart = cart does it still fail?
| |
| Mike Brind 2006-04-27, 7:51 am |
|
TRB_NV wrote:
> I'm losing information from my Session when I change pages or start the same
> page over again. I simplified the code so the example is really clear. The
> sample code that follows is supposed to generate a random number and put it
> into an Array and store it in the Session variable and then when it runs the
> next time, generate another random number and display the entire Array
> contents, by pulling the information out of the Session. I'd greatly
> appreciate someone with fresh eyes taking a look at this code. Thanks.
>
> <%@ LANGUAGE="VBSCRIPT" %>
>
> <%
> if Request.Form("clear") = "true" then
> Session.Contents.Remove("ShoppingCart")
> Session("ItemCount") = 0
> clearcart = ""
> end if
>
> dim cart(999,9)
>
> Randomize Timer
> r1 = Rnd
> r1 = r1 * 1000000
> intOrderID = 1000000 + Int (r1)
>
> intItemCount = Session("ItemCount")
>
> if intItemCount = 0 then
> intItemCount = 1
> Session("ItemCount") = intItemCount
> else
> intItemCount = intItemCount + 1
> Session("ItemCount") = intItemCount
> end if
>
> Session("ItemCount") = intItemCount
>
> cart(intItemCount,1)=intOrderID
> Session("ShoppingCart")=cart
>
> xcart=Session("ShoppingCart")
>
> for x = 1 to intItemCount
> response.write x & " " & xcart(x,1) & "<br>"
> next
>
> %>
> <form action="array.asp" method="post">
> <input type="hidden" name="clear" value="true">
> <input type="Submit" name="Submit" value="Clear Shopping Cart">
> </form>
> <form action="array.asp" method="post">
> <input type="hidden" name="clear" value="false">
> <input type="Submit" name="Submit" value="Reload">
> </form>
You're not preserving the array. Every time the page loads, you create
an array called cart, with 10 columns and 100 rows. Arrays are empty
when you first declare them. All you are doing is populating row
intItemCount with a value. That's why, as you refresh the page, you
see one (changing) value slowly crawling down the page.
Declaring such a large array as you do, when you can only use 2 cols,
is massively expensive on memory Each element in an array is a
variant, and is 16 bytes. You have created a structure in memory that
will consume 10*100*16 bytes - that's 15.625 kilobytes per session.
It's much easier, and cheaper to store your order numbers in a comma
delimited string in one session variable, along with a counter to tell
you how many there are. Then you can use the split function to convert
the string to a one-dimensional array and iterate through the elements.
<%
Dim orders, i, r1, intOrderID
Randomize Timer
r1 = Rnd
r1 = r1 * 1000000
intOrderID = 1000000 + Int (r1)
If Session("Item") = "" Then
Session("Item") = Session("Item") & intOrderID
Session("ItemCount") = 1
Else
Session("ItemCount") = Session("ItemCount") + 1
Session("Item") = Session("Item") & "," & intOrderID
End If
orders = split(Session("Item"),",")
For i = 0 to Session("ItemCount")-1
response.write i + 1 & " " & orders(i) & "<br>"
Next
%>
--
Mike Brind
| |
| Mike Brind 2006-04-27, 7:51 am |
|
Mike Brind wrote:
> TRB_NV wrote:
>
> You're not preserving the array. Every time the page loads, you create
> an array called cart, with 10 columns and 100 rows. Arrays are empty
> when you first declare them. All you are doing is populating row
> intItemCount with a value. That's why, as you refresh the page, you
> see one (changing) value slowly crawling down the page.
>
> Declaring such a large array as you do, when you can only use 2 cols,
> is massively expensive on memory Each element in an array is a
> variant, and is 16 bytes. You have created a structure in memory that
> will consume 10*100*16 bytes - that's 15.625 kilobytes per session.
>
Actually, the array you create is 10 cols by 1 thousand rows so it's
156.25 kilobytes in memory! If you have a business plan that shows you
will get 1000 orders per customer per session, lemme see it!
;-)
--
Mike Brind
|
|
|
|
|