【问题标题】:Code igniter Cart Class, won't hold cart items in the session代码点火器购物车类,不会在会话中保存购物车项目
【发布时间】:2012-08-18 15:31:36
【问题描述】:

我正在学习 nettuts 的“使用 CI 构建购物车”教程。我什至还没进入前 5 分钟,我就遇到了问题。

我的会话系统似乎无法正常工作并传递数据。我做了一些阅读,我看到 CI 不使用普通的 php 会话,而是使用会话 ID 作为标识符将它们存储在数据库中。

所以我检查了一下,我所有的数据库设置都是正确的,我根据我找到的一些堆栈答案设置了会话表和字段。我可以看到 CI 将数据写入会话表并将其存储到会话表中,但购物车没有跨页面保存项目。

我正在自动加载

    $autoload['libraries'] = array('database', 'cart');
    $autoload['helper'] = array('form', 'html', 'url'); 

我设置了这个

    $config['encryption_key'] = ''; 

^ 如果可以使用的话,我的加密密钥是由字母和数字组成的。

我看到这被设置为 false,所以我将其设置为 true

    $config['sess_use_database'] = TRUE; 

这是购物车控制器的开始......

     class Dazcart extends CI_Controller

      {
       //adds item to shopping cart

       function Addtocart() 
        {
         $item = array(
             'id' => '42',
             'name' => 'Octane Lean Build Fast',
             'qty' => 1,
             'price' => 347,
             'options' => array ('flavor' => 'chocolate')
            );

         $return = $this->cart->insert($item);
         echo "<pre>";
         print_r($this->cart->contents());
         echo "</pre>";
        }


       function Showcart()
           {
         $cartcontents = $this->cart->contents(); 
         echo "<pre>";
         print_r($cartcontents);
         echo "</pre>";

        }




      }  

现在每次我加载 /Dazcart/Addtocart 时,它都会通过 print_r 语句确认商品已成功存储到购物车中。

但是,如果我加载 /dazcart/Showcart,print_r 语句只会显示一个空数组,告诉我他的数据没有通过会话传递。 >: (

我知道这是新手,但我现在已经花了几个小时,而且我是 Code Igniter 的新手。我只是想弄清楚这一点,以便我可以了解更多信息并让我的网站正常运行。 #沮丧

感谢您的帮助。

更新:

这是我在配置文件中的会话设置

    $config['sess_cookie_name']     = 'cisession';
    $config['sess_expiration']      = 7200;
    $config['sess_expire_on_close'] = FALSE;
    $config['sess_encrypt_cookie']  = FALSE;
    $config['sess_use_database']    = TRUE;
    $config['sess_table_name']      = 'ci_sessions';
    $config['sess_match_ip']        = FALSE;
    $config['sess_match_useragent'] = TRUE;
    $config['sess_time_to_update']  = 300;

我注意到 $config['sess_use_database'] 最初是 false,我将其设置为 true。

如果 CI 不使用正常的 php 会话,我该如何进行会话转储?

【问题讨论】:

  • 您可以发布您的 CI 会话设置吗?
  • 您确定会话正常吗?插入后,转储您的 CI 会话
  • 此外,CI 将会话存储在数据库中并不完全正确——它们主要直接存储在 cookie 中;该数据库仅用作可选的备份系统,以防止用户修改其 cookie。

标签: php codeigniter


【解决方案1】:

正如@SamDufel 指出的会话存储在 cookie 中,数据库只是可选的,因此当您将数据添加到会话时,它会将其存储在 cookie 中。您需要加载会话,

$autoload['libraries'] = array('database', 'cart', 'session');

【讨论】:

    猜你喜欢
    • 2021-02-18
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多