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<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.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/**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(** >>>>>>>>>> )#</**sp**an> 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.**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> >>>>> >>>> >>>> >>>> >>>> -- >>>> 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 >>> 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
