So Jeff,

Did you ever find anything?

J

On Oct 30, 2012, at 11:05 AM, Dan Wilson <[email protected]> wrote:

> At the moment, nothing comes to mind as to why the session would be 
> replicated.
> 
> Toss the relevant MG configs into patebin and let's have a look at that.
> 
> Would it be possible to pull out some of the MG code in to a test application 
> I could download?
> 
> DW
> 
> On Tue, Oct 30, 2012 at 11:52 AM, Jeff P <[email protected]> wrote:
> That makes sense within the same function since I'm declaring a local var and 
> then checking it but it's got to be in the session for it to be set to the 
> local var. So within the function I get one answer if I request.session.cart 
> by itself but another if I pull back the entire session and have it check for 
> the cart within it. Plus I'm getting the same response from the template 
> after the addResult and redirect to the display page. Ugh!
> 
> Jeff
> 
> 
> On Tuesday, October 30, 2012 11:13:45 AM UTC-4, Dan Wilson - 
> [email protected] wrote:
> Is that because there is a reference still in the scope of the function?
> 
> : <cfset var cart = beans.UserSession.getCurrentCart()>
> 
> On Tue, Oct 30, 2012 at 10:53 AM, Jeff P <[email protected]> wrote:
> 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]> 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
>> 
>> UserSession http://pastebin.com/5mDTu7dS
>> 
>> OrderController http://pastebin.com/GdDejK0E
>> 
>> Template 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
>> 
>> 
>> 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
>>> [email protected]
>>> For more options, visit this group at
>>> 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
>>> [email protected]
>>> For more options, visit this group at
>>> 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
>> [email protected]
>> For more options, visit this group at
>> 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
> [email protected]
> 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
> 
> 
> 
> -- 
> 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
> 
> 
> 
> -- 
> 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

-- 
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