0

我想做一个电子商务网站,不想强迫用户有一个帐户来购买商品,他们可以随时做。

我可以使用 CodeIgniter 中的会话类来执行此操作,并且能够长时间(可能是 6 个月或一年)保持用户会话(即他们的购物车项目)吗?我阅读了关于会话的 CI 用户指南,它说它为您提供了通过在配置文件中将 session_expire_on_close 变量声明为 false 来设置会话不过期的选项,我猜即使在用户关闭后会话也会继续运行浏览器。

每当用户访问该站点或在他们的购物篮中添加一些东西时,我都可以开始会话。然后当他们离开并决定回来时,我可以从我的数据库中的会话表中验证他们的购物车信息并将其返回给他们。

我还想知道是否应该将购物车项目存储在 ci_sessions 表中,作为 user_data 列的用户指南中的示例给出?那就足够了吗?

只是想知道我是否朝着正确的方向前进。谢谢

4

2 回答 2

4

简短的回答:是的,你在正确的道路上。

我会怎么做(其中一些可能很明显):

  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 会话。

以上内容未经测试,但希望对您有所帮助,如果有任何需要澄清的地方,请大声疾呼。

于 2013-02-05T12:51:56.447 回答
0

CodeIgniter 使用它自己的会话(见此),它不会干扰PHP 会话

因此,您可以使用常规 PHP 会话

session_start();

创建或重新打开现有会话,其 ID 存储在 cookie 中(通常是PHPSESSID)。然后使用该会话而不是 CodeIgniter 的会话

$_SESSION['MyData'] = 12345;

也许您可以在您的 CodeIgniter 配置中检查 cookie 名称在 config.php 中没有冲突,sess_cookie_name.

于 2013-02-05T11:38:41.367 回答