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] <javascript:> > > 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] <javascript:> 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]<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
