Hi Lauri, I do something similar, generally I invoke the RunData.getUser.setTemp() method to store data that I do not want to persist for longer than the length of the session.
For information that I want to store for longer than the session I use the RunData.getUser.setPerm(), but as you noticed this stores information serialised to the database and the user must have been logged in inorder to use this. If you still want to store information without having to authenticate your user you could you cookies. I use a combination of all 3 but to simulate different behaviour. Your only problem is that using setPerm there is not obvious way to remove information once its stored there. Overwriting the object is one way, but thats not so pretty as since you're essentially storing information in a hashtable, to overwrite you must ensure that the object has the same hashcode. -----Original Message----- From: Lauri Svan [mailto:[EMAIL PROTECTED]] Sent: 06 January 2003 17:07 To: [EMAIL PROTECTED] Subject: Storing temporary data in login Hi, I have been trying to implement a simple web shop having shopping carts, e-mail confirmations and such. So far Turbine has met most of the requirements. However, I have found one problem that I have difficulties in overcoming. Majority of the pages (i.e. picking items to the shopping cart bean) require no authorization. But when checking out, the user should be prompted for user name and password. I have implemented these by extending TurbineUser with my own class. However, when logging in, the cart object stored with RunData.setTemp() is lost. I tried to fix this by extending the LoginAction used in authentication with my own class, which stores shopping cart in a temporary variable before calling super.doPerform(), and setting the cart back after the authentication is complete. This works fine if the authentication was ok, but somehow the cart is lost if authentication failed. What could be the cause of this problem and how could I fix it? The code snippet for extending the user is as follows: package com.ls.webshop.modules.actions; import org.apache.turbine.util.TurbineException; import org.apache.turbine.services.resources.TurbineResources; import org.apache.turbine.TurbineConstants; import org.apache.turbine.modules.actions.*; import org.apache.turbine.util.Log; import org.apache.turbine.util.RunData; import org.apache.turbine.services.resources.TurbineResources; import org.apache.turbine.services.security.TurbineSecurity; import org.apache.turbine.om.security.User; import org.apache.turbine.util.security.DataBackendException; import org.apache.turbine.util.security.TurbineSecurityException; import com.ls.webshop.util.business.*; import com.ls.webshop.om.WebshopUser; /** * Logins an user, with the meaning of not to clear the session prior to login. * Default configurations invalidate the session prior to executing doPerform. * To maintain a shopping cart in login, the login must be done otherwise, and * the cart should be saved in a temporary variable prior logging in. */ public class ExtendedLoginUser extends LoginUser { public void doPerform(RunData data) throws Exception { /* Fetch the shopping cart of the user, use a new one if not exists */ WebshopUser user = (WebshopUser) data.getUser(); ShoppingCart cart = (ShoppingCart) user.getTemp("cart", new ShoppingCart()); System.err.println("Authenticate"); try { /* Invalidate the current session to provide a means for logging in */ data.removeUserFromSession(); super.doPerform(data); } catch(Exception e) { /* user = (WebshopUser) data.getUser(); user.setTemp("cart", cart); throw e; */ } user = (WebshopUser) data.getUser(); if (user != null) user.setTemp("cart", cart); System.err.println("Setting next template"); /* Check whether services.webshop.navigation.redirect.key parameter exists. If so, redirect there */ String nextTemplate = data.getParameters().get(TurbineResources.getString("services.webshop.naviga tion.redirect.key")); if (nextTemplate != null) data.setScreenTemplate(nextTemplate); } } Regards, Lauri Svan [EMAIL PROTECTED] -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
