2013-02-05 44 views
0

我想做一個電子商務網站,並不想強制用戶有一個帳戶購買物品,他們可以做到這一點,只要他們覺得喜歡它。使用會話來存儲購物車使用CodeIgniter

我可以使用CodeIgniter中的會話類來做到這一點嗎?能夠在一段延長的時間段(可能是6個月或一年)內保持用戶會話(即他們的購物車項目)?我閱讀關於會話的CI用戶指南,它說它讓你選擇設置會話不失效,通過在配置文件中陳述session_expire_on_close變量爲false,我猜即使在用戶關閉瀏覽器。

無論用戶何時訪問該網站或向他們的購物籃中添加了某些東西,我都可以開始會話。然後當他們離開並決定回來時,我可以從我的數據庫中的會話表中驗證他們的購物車信息,並將它們還給他們。

我也想知道我是否應該在user_data列的用戶指南中給出的ci_sessions表中存儲購物車項目?這足夠嗎?

只是想知道我是否正朝着正確的方向前進。謝謝

+0

如果您提出這樣的問題,那麼使用CodeIgniter購物車庫可能會更明智一些,並不是說您跛腳或什麼,但它會更容易維護。我發現它製作得非常好,並允許有許多自定義字段出現! –

+0

@Vlakarados購物車類只處理添加/更新/刪除您的購物車中的項目,不保存它們以供以後訪問,對嗎? – a7omiton

+0

請閱讀http://ellislab.com/codeigniter/user-guide/libraries/cart.html –

回答

2

簡而言之:是的,你走在正確的道路上。

我怎麼會做它(一些,這可能是顯而易見的):

  1. session庫添加到config/autoload.php所以它會自動啓動。

  2. 建立了「會話變量」一節中config/config.php需要 - sess_expiration = some long timesess_expire_on_close = falseuse_database = true

  3. 爲了簡單起見,只能存儲產品ID的會話。下面是一個基本add_to_cart功能爲例:

    public function add_to_cart($product_id) { 
    
    // Whenever a user adds an item to their cart, pull out any they already have in there 
    
    $cart_products = $this->session->userdata('cart_products'); 
    
    // Add the new item 
    
    $cart_products[] = $product_id; 
    
    // And put it back into the session 
    
    $this->session->set_userdata('cart_products', $cart_products); 
    
    } 
    
  4. 使用product_ids從會話從您的分貝拉出更多詳細資料(例如產品名稱),並在屏幕上顯示出來。

由於CI保留自己的session_id這種做法應該在每次用戶再次訪問網站時自動重新填充會話,你不應該永遠需要手動查詢ci_sessions表或使用標準的PHP會議。

以上未經測試,但希望它可以幫助,如果有任何需要澄清呼喊。

+1

嗨,Adam,感謝您的幫助。從人們在上面的「一般評論」部分發布的內容看來,使用購物車類似乎是最合適的,因爲它使用會話來跟蹤購物籃中的物品。看看Cart類的文檔,我相信我也需要一個表(ci_sessions)。你怎麼看?我會很感激你的意見:) – a7omiton

+0

確實,Cart類似乎完全適合你,我完全忘記它存在!是的,你仍然需要一個ci_sessions表,儘管你不需要直接查詢它;當您將購物車轉換爲訂單時,請確保您使用'$ this-> cart-> contents();然後只需處理它即可:-) –

+0

我很難理解你不需要查詢會話表,那麼在那種情況下它的意義何在?例如,當用戶向購物車添加東西時,他們會自動啓動會話(對吧?),並且該會話將持續到它過期或者一旦銷燬購物車。對會話表的需求是隻保存有效的會話,以便一旦用戶準備購買訂單,我可以驗證它以確保它在表格中?對不起,我不明白什麼表格將用於 – a7omiton

0

CodeIgniter利用自己的會話(see this),它不會干擾PHP sessions

因此你可以使用常規的PHP會話

session_start(); 

創建或重新打開現有會話,其ID存儲在cookie中(通常是PHPSESSID)。然後使用該會話,而不是CodeIgniter的一個

$_SESSION['MyData'] = 12345; 

也許你可以在你的笨配置該Cookie名稱不config.php文件,sess_cookie_name碰撞檢查。

+0

對不起,我沒有完全理解你發佈的內容。你是否說使用PHP會話並使用PHPSESSID檢查會話是否存在? – a7omiton

+0

它比這更簡單。使用不會干擾CodeIgniter'的PHP會話。 'PHPSESSID'就是存儲在瀏覽器中的* cookie *名稱。您不必擔心,但如果CI的cookie名稱相同,則會有衝突。所以我建議你檢查CI配置以確保'sess_cookie_name'不是'PHPSESSID' –