At the top of the function that processes the order and clears the cart I 
have:
<cfset var cart = beans.UserSession.getCurrentCart()>
<cfset var theSession = beans.UserSession.getSession()>

Right after the <cfset beans.UserSession.clearCartSession()> if I put in a 

<cfthrow message="#StructKeyExists(beans.UserSession.cart)#"> returns a "No"

but 

<cfthrow message="#isStruct(cart)#"> returns a "Yes"  and the item in the 
cart is still there, it's not a freshly initialized cart.

Thanks, Jeff

On Tuesday, October 30, 2012 10:02:23 AM UTC-4, Dan Wilson - 
[email protected] wrote:
>
> What happens when you put a cfdump right after the cart clearing operation?
>
> DW
>
> On Tue, Oct 30, 2012 at 9:56 AM, Jeff P <[email protected] 
> <javascript:>>wrote:
>
>> The sessionid remains correct and separate between the two browsers. The 
>> product in the cart is also correct for the user's session. This has also 
>> helped verify that the cart that shows up after the order is complete is 
>> not a freshly initialized cart but the same cart from the order (or a copy 
>> as you stated earlier) 
>>
>> Jeff
>>
>>
>> On Monday, October 29, 2012 7:48:15 PM UTC-4, Jared Rypka-Hauer wrote:
>>
>>> Try something once.
>>>
>>> Use two different browsers and create 2 different sessions with 
>>> different products in the cart so you can differentiate them.
>>>  
>>> The process one cart and see if the symptom still exists and if it does, 
>>> check to see which product is in the cart, the one that should be there or 
>>> the one from the other session...
>>>
>>> Just a thought...
>>>
>>> J
>>>
>>> Then run your test and make sure that the cart you see in the dump is 
>>> the cart that actually belongs to the user in question.
>>> On Oct 29, 2012, at 1:24 PM, Jeff P <[email protected]> wrote:
>>>
>>> Here are the parts in pastebin
>>>
>>> Controller http://pastebin.**com/q9sg4u3a <http://pastebin.com/q9sg4u3a>
>>>
>>> UserSession http://pastebin.**com/5mDTu7dS<http://pastebin.com/5mDTu7dS>
>>>
>>> OrderController http://**pastebin.com/GdDejK0E<http://pastebin.com/GdDejK0E>
>>>
>>> Template http://pastebin.com/**0MDbxPJg <http://pastebin.com/0MDbxPJg>
>>>
>>> On Monday, October 29, 2012 1:59:47 PM UTC-4, Jeff P wrote:
>>>>
>>>> <cfset event.copyToScope( variables, "currentUser, currentCart, 
>>>> userSession")>
>>>> <cfset me = variables.currentUser>
>>>> <cfset cart = variables.currentCart>
>>>>
>>>> <cfdump var="#userSession#"> shows the cart isn't in the session
>>>>
>>>> <cfdump var="#currentCart#" label="currentCart"> which comes from the 
>>>> session as well, returns the object.
>>>>
>>>> I will give the direct calls a try. I had thought about always having 
>>>> the cart exist but hadn't worked towards it yet. 
>>>>
>>>> Thanks also for reminding me about pastebin. 
>>>>
>>>> Jeff
>>>>
>>>> On Monday, October 29, 2012 1:45:00 PM UTC-4, Jared Rypka-Hauer wrote:
>>>>>
>>>>> Can you show the code you're using to get the cart from the event into 
>>>>> the page's variables scope? It's possible that there's a structCopy() 
>>>>> involved rather than a simple assignment.
>>>>>
>>>>> The difference is that doing a structCopy() would cause a separate 
>>>>> instance of session.cart to be set to the event object and/or the 
>>>>> variables 
>>>>> scope of your template. If that's the case then the behavior you're 
>>>>> seeing 
>>>>> makes perfect sense. If this is the case, the byRef nature of structs 
>>>>> that 
>>>>> you're depending on isn't going to work because you have a discrete COPY 
>>>>> of 
>>>>> the objects in the event object and variables scope. For some reason this 
>>>>> is ringing a bell in the back of my mind as far as MG's functionality and 
>>>>> unexpected behaviors.
>>>>>
>>>>> You may be right, I may be crazy. But I just might be the lunatic 
>>>>> you're looking for. Give it a try, see what happens. :)
>>>>>
>>>>> Just for shits and giggles, you could also try replacing your function 
>>>>> calls with direct references to the relevant variable. I know it breaks 
>>>>> encapsulation, but I'm not suggesting you do it for your production code, 
>>>>> just remark out your calls to UserSession and CurrentCart and replace 
>>>>> them 
>>>>> with direct references to the variables. That will eliminate your 
>>>>> machinery 
>>>>> from the equation and tell you if you have a bug in your code or if 
>>>>> there's 
>>>>> something deeper going on.
>>>>>
>>>>> You could also try setting session.cart to "" rather than using 
>>>>> structDelete(). Replace structKeyExists() with isStruct() and just have 
>>>>> session.cart always exist...
>>>>>
>>>>> Man it's been a long time since I've responded to a community support 
>>>>> request like this... feels good!
>>>>>
>>>>> Let us know what you find out!
>>>>>
>>>>> J
>>>>>
>>>>> PS - If you really want help with this you might be best off to post 
>>>>> the code to the template in question, both controllers, your UserSession 
>>>>> and your Cart to something like pastebin.com or nomorepasting.com and 
>>>>> send us links to them all so we can see the whole codebase in a format 
>>>>> that's familiar and easily readable. Both of those resources provide 
>>>>> ColdFusion code support so they will color code highlight things 
>>>>> correctly.
>>>>>
>>>>> http://pastebin.com
>>>>> http://www.nomorepasting.com/**paste.php<http://www.nomorepasting.com/paste.php>
>>>>>
>>>>>
>>>>> On Oct 29, 2012, at 12:26 PM, Jeff P <[email protected]> wrote:
>>>>>
>>>>> This is in a controller called OrderController Here is the code: 
>>>>>
>>>>> <cffunction name="processOrder" access="public" returntype="void" 
>>>>> output="false">
>>>>> <cfargument name="event" type="any">
>>>>>
>>>>>         <!--- get the cart data --->
>>>>> <cfset var cart = beans.UserSession.**getCurrentCart()>
>>>>>         
>>>>>        <cfif returnCode eq "Y">
>>>>>      <!--- if payment is successful, --->
>>>>>       <!--- clear database tables for the cart --->
>>>>>       <cfset beans.cartService.**removeCartFromDatabase(cart)>
>>>>>       <!--- clear the cart session --->
>>>>>       <cfset beans.UserSession.**clearCartSession()>
>>>>>      <cfset beans.UserSession.**clearCheckout()>
>>>>>       <!--- delete the credit card temp stuff --->
>>>>>      <cfset beans.OrderService.**deleteCreditCardData(myOrder)>
>>>>>       <cfset arguments.event.setValue("**publicOrderNumber", 
>>>>> myOrder.getPublicOrderNumber()**)>
>>>>>       <cfset arguments.event.addResult("**paymentAccepted")>
>>>>>  <cfelse>
>>>>>             .....
>>>>>          </cfif>
>>>>>
>>>>> The code to clear the cart session and checkout in the UserSession cfc 
>>>>> are:
>>>>>
>>>>> <cffunction name="clearCartSession" access="public" output="false">
>>>>>  <cflock timeout="3" type="exclusive" scope="session">
>>>>> <cfset structDelete( session, "cart" )>
>>>>>  </cflock>
>>>>> </cffunction> 
>>>>> <cffunction name="clearCheckout" access="public" output="false">
>>>>>  <cflock timeout="3" type="exclusive" scope="session">
>>>>> <cfset structDelete( session, "checkout" )>
>>>>>  </cflock>
>>>>> </cffunction>
>>>>>
>>>>> Thank you Dan.
>>>>>
>>>>> On Monday, October 29, 2012 11:02:52 AM UTC-4, Dan Wilson - 
>>>>> [email protected] wrote:
>>>>>>
>>>>>> Show the portion of code where you delete the cart after a successful 
>>>>>> transaction. 
>>>>>>
>>>>>> DW 
>>>>>> On Oct 29, 2012 10:41 AM, "Jeff P" <[email protected]> wrote:
>>>>>>
>>>>>>> Hey everybody, 
>>>>>>>
>>>>>>> I'm experiencing so strangeness with sessions and am hoping you 
>>>>>>> folks could shed some light on on what's happening. I have a cart app 
>>>>>>> in MG 
>>>>>>> 3.1.299. When I complete an order and delete the cart from the session 
>>>>>>> and 
>>>>>>> show the order complete page a dump of the session shows the cart is no 
>>>>>>> longer in the session scope. However, another call to the session on 
>>>>>>> the 
>>>>>>> same page shows the cart as a valid struct within the session.
>>>>>>>
>>>>>>> In my Controller.cfc I have an onRequestStart function that copies 
>>>>>>> the cart and the user (if they exist) to the event scope. I also have 
>>>>>>> it 
>>>>>>> copying the entire session through the UserSession.cfc to try to figure 
>>>>>>> this out. Here are the pertinent parts of my controller.cfc and 
>>>>>>> userSession.cfc:
>>>>>>>
>>>>>>> *Controller.cfc*
>>>>>>>
>>>>>>>          <cffunction name="onRequestStart" access="public" 
>>>>>>> output="false">
>>>>>>> <cfargument name="event" type="any">
>>>>>>>  <!--- copy the cart to the event scope if it exists. --->
>>>>>>> <cfif beans.UserSession.cartExists()**>
>>>>>>>  <cfset arguments.event.setValue("**currentCart", beans.UserSession.
>>>>>>> **getCurrentCart())>
>>>>>>> </cfif>
>>>>>>>  <!--- and for the user if they're logged in. --->
>>>>>>> <cfif beans.UserSession.loggedIn()>
>>>>>>>  <cfset arguments.event.setValue("**currentUser", beans.UserSession.
>>>>>>> **getCurrentUser())>
>>>>>>> </cfif>
>>>>>>>  <!--- return the whole session for some testing --->
>>>>>>> <cfset arguments.event.setValue("**userSession", 
>>>>>>> beans.UserSession.getSession()**)>
>>>>>>>  </cffunction>
>>>>>>>
>>>>>>> *UserSession.cfc*
>>>>>>>
>>>>>>>         <cffunction name="cartExists" access="public" output="false">
>>>>>>>  <cflock timeout="3" type="readonly" scope="session"> 
>>>>>>> <cfreturn structKeyExists( session, "cart" )>
>>>>>>>  </cflock>
>>>>>>> </cffunction>
>>>>>>>
>>>>>>>         <cffunction name="getCurrentCart" access="public" 
>>>>>>> output="false">
>>>>>>>  <cflock timeout="3" type="readonly" scope="session">
>>>>>>> <cfreturn session.cart>
>>>>>>>  </cflock>
>>>>>>> </cffunction>
>>>>>>>  <cffunction name="getCurrentUser" access="public" output="false">
>>>>>>>  <cflock timeout="3" type="readonly" scope="session">
>>>>>>> <cfreturn session.user>
>>>>>>>  </cflock>
>>>>>>> </cffunction>
>>>>>>>  <cffunction name="getSession" access="public" output="false">
>>>>>>>  <cflock timeout="3" type="readonly" scope="session">
>>>>>>> <cfreturn session>
>>>>>>>  </cflock>
>>>>>>> </cffunction>
>>>>>>>
>>>>>>>         <cffunction name="loggedIn" access="public" output="false">
>>>>>>>  <cflock timeout="3" type="readonly" scope="session">
>>>>>>> <cfreturn structKeyExists( session, "user" )>
>>>>>>>  </cflock>
>>>>>>> </cffunction>
>>>>>>>
>>>>>>> In my template I have a chink of code that displays a link to the 
>>>>>>> cart if it exists and has at least one item in it:
>>>>>>>
>>>>>>> If I use the currentCart variable set in Controller.cfc, it returns 
>>>>>>> the cart from the session after the order is processed even though a 
>>>>>>> cfdump 
>>>>>>> of the session shows it isn't there.
>>>>>>>
>>>>>>> <cfif isStruct(variables.**currentCart) and 
>>>>>>> variables.currentCart.**getItemCount() 
>>>>>>> gte 1>
>>>>>>> <div class="row-fluid">
>>>>>>> <div id="viewCart" class="span12">
>>>>>>>  <a href="#click_ViewCart#">Your cart: <span 
>>>>>>> class="bold">#variables.**currentCart.getItemCount()#</**span> 
>>>>>>> item<cfif variables.currentCart.**getItemCount() neq 1>s</cfif></a> 
>>>>>>> <a href="#click_ViewCart#"><img src="images/shoppingCart.png" alt="view 
>>>>>>> cart"></a>
>>>>>>>  </div>
>>>>>>> </div> 
>>>>>>> </cfif> 
>>>>>>>
>>>>>>> *The display section still shows up after the order is complete*.
>>>>>>>
>>>>>>> But, If I use the entire getSession function from the Controller.cfc 
>>>>>>> it acts as it's supposed to:
>>>>>>>
>>>>>>> <cfif structKeyExists(variables.**userSession, "cart") and 
>>>>>>> variables.userSession.cart.**getItemCount() gte 1>
>>>>>>> <div class="row-fluid">
>>>>>>>  <div id="viewCart" class="span12">
>>>>>>> <a href="#click_ViewCart#">Your cart: <span class="bold">#variables.
>>>>>>> **userSession.cart.getItemCount(**)#</span> item<cfif 
>>>>>>> variables.userSession.cart.**getItemCount() neq 1>s</cfif></a> <a 
>>>>>>> href="#click_ViewCart#"><img src="images/shoppingCart.png" alt="view 
>>>>>>> cart"></a>
>>>>>>>  </div>
>>>>>>> </div> 
>>>>>>> </cfif> 
>>>>>>>
>>>>>>> *The display section doesn't show up after the order is complete.*
>>>>>>>
>>>>>>> How can one call to the session return that the cart doesn't exist 
>>>>>>> and then a second, later call to the session on the same page return 
>>>>>>> that 
>>>>>>> it does?
>>>>>>>
>>>>>>> Thank you for looking at this,
>>>>>>>
>>>>>>> Jeff P.
>>>>>>>
>>>>>>> -- 
>>>>>>> Model-Glue Sites:
>>>>>>> Home Page: http://www.model-glue.com
>>>>>>> Documentation: http://docs.model-glue.com
>>>>>>> Bug Tracker: http://bugs.model-glue.com
>>>>>>> Blog: http://www.model-glue.com/blog
>>>>>>>  
>>>>>>> You received this message because you are subscribed to the Google
>>>>>>> Groups "model-glue" group.
>>>>>>> To post to this group, send email to [email protected]
>>>>>>> To unsubscribe from this group, send email to
>>>>>>> model-glue+...@googlegroups.**com
>>>>>>> For more options, visit this group at
>>>>>>> http://groups.google.com/**group/model-glue?hl=en<http://groups.google.com/group/model-glue?hl=en>
>>>>>>
>>>>>>
>>>>> -- 
>>>>> Model-Glue Sites:
>>>>> Home Page: http://www.model-glue.com
>>>>> Documentation: http://docs.model-glue.com
>>>>> Bug Tracker: http://bugs.model-glue.com
>>>>> Blog: http://www.model-glue.com/blog
>>>>>  
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "model-glue" group.
>>>>> To post to this group, send email to [email protected]
>>>>> To unsubscribe from this group, send email to
>>>>> model-glue+...@googlegroups.**com
>>>>> For more options, visit this group at
>>>>> http://groups.google.com/**group/model-glue?hl=en<http://groups.google.com/group/model-glue?hl=en>
>>>>>
>>>>>
>>>>>
>>>  -- 
>>> Model-Glue Sites:
>>> Home Page: http://www.model-glue.com
>>> Documentation: http://docs.model-glue.com
>>> Bug Tracker: http://bugs.model-glue.com
>>> Blog: http://www.model-glue.com/blog
>>>  
>>> You received this message because you are subscribed to the Google
>>> Groups "model-glue" group.
>>> To post to this group, send email to [email protected]
>>> To unsubscribe from this group, send email to
>>> model-glue+...@**googlegroups.com
>>> For more options, visit this group at
>>> http://groups.google.com/**group/model-glue?hl=en<http://groups.google.com/group/model-glue?hl=en>
>>>
>>>
>>>  -- 
>> Model-Glue Sites:
>> Home Page: http://www.model-glue.com
>> Documentation: http://docs.model-glue.com
>> Bug Tracker: http://bugs.model-glue.com
>> Blog: http://www.model-glue.com/blog
>>  
>> You received this message because you are subscribed to the Google
>> Groups "model-glue" group.
>> To post to this group, send email to [email protected]<javascript:>
>> To unsubscribe from this group, send email to
>> [email protected] <javascript:>
>> For more options, visit this group at
>> http://groups.google.com/group/model-glue?hl=en
>>
>
>
>
> -- 
> Plutarch - "The mind is not a vessel to be filled but a fire to be 
> kindled."
>  

-- 
Model-Glue Sites:
Home Page: http://www.model-glue.com
Documentation: http://docs.model-glue.com
Bug Tracker: http://bugs.model-glue.com
Blog: http://www.model-glue.com/blog

You received this message because you are subscribed to the Google
Groups "model-glue" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/model-glue?hl=en

Reply via email to