View Issue Details

IDProjectCategoryView StatusLast Update
0002655OXID eShop (all versions)4.07. Source code, Testpublic2012-12-10 13:44
Reportercpjolly Assigned To 
PrioritynormalSeveritymajorReproducibilityalways
Status resolvedResolutionfixed 
Product Version4.4.7 revision 33396 
Fixed in Version4.5.3 revision 39087 
Summary0002655: oxuserbasket and oxuserbasketitems not loaded when oxid_oxbaseshop cookie used
Description(1a). The customer logs-in with "Remember Me" selected. This correctly sets the oxid_oxbaseshop cookie with 12 months lifetime
(2a). The customer adds items to the basket and this works as normal
(3a). The customer closes the browser. This deletes the session cookies and correctly leaves the oxid_oxbaseshop cookie in the browser
(4a). Later, the customer opens a new browser window and is automatically logged in with the oxid_oxbaseshop cookie BUT THE BASKET IS EMPTY

This is because in (4a) oxuserbasket->load() is never called, so the saved basket is not loaded from the oxuserbaskets and oxuserbasketitems tables and is not copied into the session.

When oxcmp_basket->render() calls oxbasket->calculateBasket(), this deletes the saved oxuserbasket. Since the session oxbasket is empty, it saves nothing to oxuserbaskets and oxuserbasketitems.

By comparison, this is how it correctly works with "Remember Me" not selected.

(1b). The customer logs-in with "Remember Me" NOT selected.
(2b). The customer adds items to the basket and this works as normal
(3b). The customer closes the browser. This deletes the session cookies
(4b). Later, the customer opens a new browser window and logs-in again. THE BASKET IS LOADED CORRECTLY

This is because in (4b) oxcmp_user->login_noredirect calls oxcmp_user->login, which calls oxuser->login, which calls oxbasket->load() on line 1260 of oxuser.php. This correctly loads the saved user basket from the oxuserbaskets and oxuserbasketitems tables and copies this into the oxbasket, and adds oxbasket to the session.

Then, oxcmp_basket->render() calls oxbasket->calculateBasket(). This correctly loads and deletes the old oxuserbasket contents and saves the new contents of oxbasket into oxuserbaskets and oxuserbasketitems. At the end, oxstart->pageoxshopcontrol->pageClose() calls oxsession->freeze, which serializes oxbasket and saves it in the session.
Additional InformationJust a final comment: in (4a), no session is started, but in (4b), the POST parameter login_noredirect means that in oxsession.php _isSessionRequiredAction() correctly returns true and initNewSession() is called, which starts a new session.

I don't think this is a problem for oxuserbasket, but should (4a) start a session for the logged-in user ?
TagsNo tags attached.
Theme
BrowserAll
PHP Versionany
Database Versionany

Activities

cpjolly

2011-03-27 23:20

reporter   ~0004258

Last edited: 2011-03-28 11:05

small typo: last line should read oxstart->pageClose()

I have not fully tested it, but I think this bug is also in 4.5.0_beta3

birute_meilutyte

2011-04-29 15:39

reporter   ~0004424

1) problem still exist in 4.5.0.

2) also, if ssl is on, such error is shown after user opens new browser window:
Cookie not found, creating new SID...
Cookie:
Session: ox_true
URL: http://eshop/