私も電子商取引システムを開発していますが、同じ問題があります。データベースにシリアル化されたデータとして保存されているすべてのデータを管理するのは好きではありませんでした。特にカート/バスケットの場合はそうではありません。
私はCIとstackoverflowにはまったく慣れていませんが、ドキュメントに書かれているようにci_sessionテーブルを設定して、CIセッションの一貫性とセキュリティを維持することを考えました。次に、管理するセッション データごとに、セッション変数に参照 ID を 1 つだけ追加します。カートの例:
$unique_cart_id = random_string('unique');
$this->session->set_userdata('cart_id', $unique_cart_id);
そして今、すべてのデータを含む別の「バスケット」テーブルでcart_idを参照しています。例えば:
CREATE TABLE basket (
id int(11) NOT NULL auto_increment,
cart_id varchar(32) default NULL,
timestamp timestamp NULL default NULL,
price float(10,2) default NULL,
title varchar(100) default NULL,
serialized_data text,
product_id int(11) default NULL,
PRIMARY KEY (id)
)
誰かがバスケットに何かを追加するたびに、セッション変数から cart_id を取得します。
$cart_id = $this->session->userdata('cart_id');
$cart_id
小さな挿入スクリプトを記述して、「バスケット」テーブルに他のカート データと一緒に保存します。
$data = array(
'cart_id' => $cart_id,
'title' => $product_title,
'product_id' => $product_id,
'price' => $price,
'serialized_data' => serialize(array('what ever you need else'))
);
$this->db->insert('basket', $data);
誰かがバスケットを表示したい場合は$cart_id
、セッション変数から再度取得し、cart_id と一致するデータベースをクエリします。
$this->db->query("SELECT * FROM basket WHERE cart_id = ?", array($cart_id));
また、他のセッション データ、管理者およびユーザー ログインにも同じ原則を使用します。したがって、ユーザーごとに 1 つのセッション Cookie しか保持しませんが、データベース内で各タイプのセッション データを個別に管理できます。
これはアイデアの大まかな内訳にすぎません。お役に立てば幸いです。