Codeigniter/PHP中的多个会话

Codeigniter/PHP中的多个会话,codeigniter,Codeigniter,我正在codeigniter中开发一个电子商务网站,其中包含以下内容: 管理员登录 购物车 用户登录 现在,我无法找到一种机制来使用不同的数据集管理这三个会话 我知道它可以通过核心php中的session_name()实现。但对于codeigniter,我有点困惑。 谷歌搜索了很多,但找不到正确的答案 我希望对codeigniter中的多个会话有一个清晰的了解,这样以后就不会产生任何混乱。任何到教程的链接都会很好 $this->session->set_data('admin',$a

我正在codeigniter中开发一个电子商务网站,其中包含以下内容:

  • 管理员登录
  • 购物车
  • 用户登录
  • 现在,我无法找到一种机制来使用不同的数据集管理这三个会话

    我知道它可以通过核心php中的session_name()实现。但对于codeigniter,我有点困惑。 谷歌搜索了很多,但找不到正确的答案

    我希望对codeigniter中的多个会话有一个清晰的了解,这样以后就不会产生任何混乱。任何到教程的链接都会很好

    $this->session->set_data('admin',$array_of_admin_data);
    $this->session->set_data('user',$array_of_user_data);
    $this->session->set_data('cart',$array_of_cart_data);
    
    然后检索每个seision数据?使用

    $this->session->userdata('admin');
    

    为什么这不起作用?

    Codeigniter的会话与本机PHP会话完全不同,它非常安全,尤其是存储在数据库中时。您可以使用codeigniter的会话和本机PHP会话,它们可以很好地协同工作,因为PHP会将会话视为不同的变量。 如果要检查是否存在codeigniter会话值,请使用

    if(isset($this->session->userdata['course_id']))
    {
        $this->data['course_id'] = $this->session->userdata('course_id');
    } 
    
    而本机PHP看起来像

    if(isset($_SESSION['course_id']))
    {
        $this->data['course_id'] = $_SESSION['course_id'];
    } 
    

    我也在开发一个电子商务系统,也有同样的问题。我不喜欢管理数据库中作为序列化数据存储的所有数据,尤其是购物车/购物篮,因为这会使查询数据库变得困难,我只是觉得这有点混乱

    我对CI和stackoverflow非常陌生,但我的想法是按照在中编写的方式设置CI_会话表,从而保持CI会话的一致性和安全性。然后,对于要管理的每个会话数据,我只向会话变量添加一个引用id。例如,对于购物车:

    $unique_cart_id = random_string('unique');
    $this->session->set_userdata('cart_id', $unique_cart_id);
    
    现在我在一个单独的“篮子”表中引用我的购物车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)
    )
    
    现在,每次有人想向购物篮中添加东西时,我都会从会话变量中获取购物车id:

    $cart_id = $this->session->userdata('cart_id');
    
    并通过编写一个插入脚本,将
    $cart\u id
    与任何其他购物车数据一起存储在我的“basket”表中

    $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\u id
    ,并查询与购物篮id匹配的数据库

    $this->db->query("SELECT * FROM basket WHERE cart_id = ?", array($cart_id));
    
    对于其他会话数据、管理员和用户登录,使用相同的原则。因此,我只为每个用户保留一个会话cookie,但我可以在数据库中单独管理每种类型的会话数据

    这只是这个想法的粗略分解。我希望它能有所帮助。

    使用
    userdata()
    方法,您可以检索创建会话期间保存的字段

    例如,您传递了\u admin\u数据数组的
    $array\u,其中包含一些信息,如
    userType
    。如果要检索此值,必须按如下方式调用
    userdata()

    $this->session->userdata('userType');
    

    希望,这会有所帮助。

    我想使用本机PHP会话如果您搜索本机会话,有一个用于本机会话的代码点火器库。不知道它工作得有多好。常规的代码点火器会话是使用大小限制在4k左右的cookie完成的,当您超过大小限制时,cookie会破坏一切。您还可以通过更改config选项来使用db_会话,这将消除大小限制。我确实希望使用本机PHP会话,而不是codeigniter提供的库。我知道这是可以做到的,但没有具体细节。你为什么想要“多个”会话?只需进行一次包含所有数据的会话??感谢您的回复。但我不想使用codeigniter会话,因为它们使用cookies存储数据,这迫使我考虑安全问题。