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<http://pastebin.com/q9sg4u3a> >>>> >>>> UserSession http://pastebin.**co**m/5mDTu7dS<http://pastebin.com/5mDTu7dS> >>>> >>>> OrderController >>>> http://**pastebi**n.com/GdDejK0E<http://pastebin.com/GdDejK0E> >>>> >>>> Template http://pastebin.com/**0**MDbxPJg<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.comand >>>>>> 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/**p**aste.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.**getCurrentCa**rt()> >>>>>> >>>>>> <cfif returnCode eq "Y"> >>>>>> <!--- if payment is successful, ---> >>>>>> <!--- clear database tables for the cart ---> >>>>>> <cfset beans.cartService.**removeCartFr**omDatabase(cart)> >>>>>> <!--- clear the cart session ---> >>>>>> <cfset beans.UserSession.**clearCartSes**sion()> >>>>>> <cfset beans.UserSession.**clearCheckou**t()> >>>>>> <!--- delete the credit card temp stuff ---> >>>>>> <cfset beans.OrderService.**deleteCredi**tCardData(myOrder)> >>>>>> <cfset arguments.event.setValue("**publ**icOrderNumber", >>>>>> myOrder.getPublicOrderNumber()****)> >>>>>> <cfset arguments.event.addResult("**pay**mentAccepted")> >>>>>> <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("**curr**entCart", >>>>>>>> beans.UserSession.**getCurrentCa**rt())> >>>>>>>> </cfif> >>>>>>>> <!--- and for the user if they're logged in. ---> >>>>>>>> <cfif beans.UserSession.loggedIn()> >>>>>>>> <cfset arguments.event.setValue("**curr**entUser", >>>>>>>> beans.UserSession.**getCurrentUs**er())> >>>>>>>> </cfif> >>>>>>>> <!--- return the whole session for some testing ---> >>>>>>>> <cfset arguments.event.setValue("**user**Session", >>>>>>>> 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.**getItemC**ount() gte 1> >>>>>>>> <div class="row-fluid"> >>>>>>>> <div id="viewCart" class="span12"> >>>>>>>> <a href="#click_ViewCart#">Your cart: <span >>>>>>>> class="bold">#variables.**curren**tCart.getItemCount()#</**span> >>>>>>>> item<cfif variables.currentCart.**getItemC**ount() 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.**user**Session, "cart") and >>>>>>>> variables.userSession.cart.**get**ItemCount() gte 1> >>>>>>>> <div class="row-fluid"> >>>>>>>> <div id="viewCart" class="span12"> >>>>>>>> <a href="#click_ViewCart#">Your cart: <span class="bold">#variables. >>>>>>>> **userSe**ssion.cart.getItemCount(**)#</**span> item<cfif >>>>>>>> variables.userSession.cart.**get**ItemCount() 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.**co**m >>>>>>>> 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.**co**m >>>>>> 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> >>> >> >> >> >> -- >> 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
