0

CodeIgniter を使用して小さな Web ショップを開発しようとしています。アイテムを保管するには、Cartライブラリを使用します。ほとんどの場合、すべてがうまく機能します。ただし、リダイレクト後にカートの内容が失われることがあります。

ウェブ上でいくつかの修正を見つけましたが、私の場合はどれも機能しません。これが私のセットアップです:

  • セッションを保存するためにDBを使用します
  • 私はAJAXを使用していません
  • セッション Cookie の名前にアンダースコアがありません

リフレッシュの例を次に示します。

public function add_item() {
    $item_id = $this->input->post('item');

    // Query database
    $item = $this->model->find_item($item_id);

    // Rewrite model info
    ...

    $data = array(
        'id'      => 'item-' . $item['id'] . '-size-' . $item['sizes'][$i]['id'],
        'qty'     => $qty,
        'price'   => $item['sizes'][$i]['price'],
        'name'    => $item['name'],
        'options' => array('short_name' => $item['short_name'])
    );

    $this->cart->insert($data);

    usleep(10000);
    redirect('shop');
}
4

1 に答える 1

1

この質問のおかげで、私はついに私の問題に対する答えを見つけました: CodeIgniter Cart and Session lost when refresh page

問題は、セッションに保存されたデータが大きくなりすぎたことです。CodeIgniter はすべてのデータを Cookie に保存しますが、これは 4kB に制限されています。私の間違いは、DB を使用してセッションを保存すれば、その制限を回避できると考えたことです。どうやら、CodeIgniter はセキュリティ上の理由から、セッションを「のみ」データベースに保存します。Cookie にはまだ多くのデータがあります。

現在、Native session というライブラリを使用しています。ここで見つけました: https://github.com/EllisLab/CodeIgniter/wiki/Native-session

ファイルを「application/libraries」に置き、最初の関数の名前を「__construct()」に変更し、それを自動インポートに追加し、コード内のすべての「session」タグを「native_session」に置き換えました。CodeIgniter の元のセッションを使用していたため、Cart クラスも変更する必要がありました。

于 2013-08-27T21:31:21.613 に答える