2012-08-22 72 views
0

我发展具有笨会话一个电子商务网站为以下:多个会话

  1. 管理员登录
  2. 购物车
  3. 用户登录

现在我我无法弄清楚用不同的数据集来管理这三个会话的机制。

我知道它可以通过核心php中的session_name()来实现。但与codeigniter我有点困惑。 搜索了很多,但找不到合适的答案。

我想清楚地了解codeigniter中的多个会话,以便将来不会产生任何混淆。任何链接到教程将是伟大的。

+0

我想使用本机PHP会话 – beNerd

+0

如果你是谷歌的话,那么它就是本地会话的代码点火器库。不知道它有多好。常规的代码点火器会话是用一个限制在4K左右的cookie来完成的,当你超过大小限制时,会破坏所有内容。你也可以使用db_sessions,通过改变config选项来删除大小限制。 – Rooster

+0

以及我真的想使用原生PHP会话,而不是由codeigniter提供的库。我知道这可以完成,但不是具体的。 – beNerd

回答

2
$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); 

然后检索每个参数数据?使用

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

为什么不能这样工作?

+1

感谢您的回复。但我不想使用codeigniter会话,因为他们使用cookie存储数据,这迫使我考虑安全问题。 – beNerd

1

Codeigniter的会话与Native PHP Session完全不同,它非常安全,尤其是当存储在数据库中时。您可以使用codeigniter的会话和Native PHP Session,它们可以很好地一起工作,因为PHP会看到不同的变量。 如果你想检查一个笨会话值存在使用

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']; 
} 
1

我也在开发一个电子商务系统,并有同样的问题。我不喜欢管理数据库中所有以序列化数据存储的数据,特别是不用于购物车/购物篮,因为它使查询数据库变得困难,我只是觉得它有点麻烦。

我是很新的CI和计算器,但我的想法是建立ci_session表,因为它是写在docs,从而保持CI会话的一致性和安全性。然后,我仅为要管理的每个会话数据添加一个参考ID到会话变量。例如。对于购物车:

$unique_cart_id = random_string('unique'); 
$this->session->set_userdata('cart_id', $unique_cart_id); 

现在我引用我的cart_id在一个单独的“basket”表中的所有数据。例如:

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 “ - 表,通过编写一点插入脚本。现在

​​

如果有人想查看篮我只是再次检索从会话变量中的$cart_id和查询它的cart_id匹配的数据库。

$this->db->query("SELECT * FROM basket WHERE cart_id = ?", array($cart_id)); 

而且您使用相同的原则为您的其他会话数据,管理员和用户登录。因此,我只保留每个用户的单个会话cookie,但我可以在数据库中单独管理每种类型的会话数据。

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

-1

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

例如,您通过$array_of_admin_data array,其中包含一些信息,如userType。如果你想检索此值,则必须调用userdata()这样的:

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

希望,这有助于。