我发展具有笨会话一个电子商务网站为以下:多个会话
- 管理员登录
- 购物车
- 用户登录
现在我我无法弄清楚用不同的数据集来管理这三个会话的机制。
我知道它可以通过核心php中的session_name()来实现。但与codeigniter我有点困惑。 搜索了很多,但找不到合适的答案。
我想清楚地了解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);
然后检索每个参数数据?使用
$this->session->userdata('admin');
为什么不能这样工作?
感谢您的回复。但我不想使用codeigniter会话,因为他们使用cookie存储数据,这迫使我考虑安全问题。 – beNerd
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'];
}
我也在开发一个电子商务系统,并有同样的问题。我不喜欢管理数据库中所有以序列化数据存储的数据,特别是不用于购物车/购物篮,因为它使查询数据库变得困难,我只是觉得它有点麻烦。
我是很新的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,但我可以在数据库中单独管理每种类型的会话数据。
这只是这个想法的粗略分解。我希望它有帮助。
使用userdata()
方法,您可以检索在创建会话期间保存的字段。
例如,您通过$array_of_admin_data array
,其中包含一些信息,如userType
。如果你想检索此值,则必须调用userdata()
这样的:
$this->session->userdata('userType');
希望,这有助于。
我想使用本机PHP会话 – beNerd
如果你是谷歌的话,那么它就是本地会话的代码点火器库。不知道它有多好。常规的代码点火器会话是用一个限制在4K左右的cookie来完成的,当你超过大小限制时,会破坏所有内容。你也可以使用db_sessions,通过改变config选项来删除大小限制。 – Rooster
以及我真的想使用原生PHP会话,而不是由codeigniter提供的库。我知道这可以完成,但不是具体的。 – beNerd