2014-01-29 23 views
0

在購物車是在$_SESSION['shopping_cart'] array設置一個在線商店,我有這樣的檢查在頁面的頂部:

session_start(); 
if (empty($_SESSION['shopping_cart'])) { 
    //Not granting access for users with empty carts or when the session has expired 
    header('Location: toanotherpage'); 
    exit; 
} 

這有所有工作直到它沒有。出於某種原因,在結帳頁面上花費了太多時間的用戶已經使會話過期,但它仍以某種方式滑過頁面頂部的empty()檢查。這一切都發生在頁面重新加載的表單提交之後。這意味着用戶被收費,但進一步下降的訂單確認和收據無法生成,因爲會議是空的。

難道empty()以某種方式可以將過期的會話誤認爲不爲空?或者理論上講,當腳本執行時會話被破壞,因此在檢查完成後會話不是空的?

感謝

+0

做任何事情進一步下跌的一頁影響會議的價值?可能是'$ _SESSION ['shopping_cart']'*不是*最初是空的,並且稍後的邏輯會清空它。 – MichaelRushton

+0

@MichaelRushton只有在訂單確認和收據生成後纔會設置。 – NewInTheBusiness

+0

你確定它*是空的?請記住'$ _SESSION ['shopping_cart'] = array(NULL)'*'不是*空的。 – MichaelRushton

回答

1

試試這個,

if (!isset($_SESSION['shopping_cart']) || count($_SESSION['shopping_cart'])==0) { 

,而不是

if (empty($_SESSION['shopping_cart'])) { 
+0

什麼可以通過原始的,不能超越你的建議? – MichaelRushton

+0

發生了什麼事是一個罕見的例外,就像我說過的那樣只發生過一次。我想知道的是爲什麼會發生這種情況。我認爲會議不應該被視爲空的,儘管它應該有。請在結尾處閱讀我的問題。 – NewInTheBusiness