我正在使用 codeigniter 开发一个电子商务网站,其中包含以下会话:
- 管理员登录
- 购物车
- 用户登录
现在我无法弄清楚使用不同数据集管理这三个会话的机制。
我知道它可以通过核心 php 中的 session_name() 来实现。但是对于codeigniter,我有点困惑。谷歌搜索了很多,但找不到正确的答案。
我想清楚地了解 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);
然后检索每个seesion数据?使用
$this->session->userdata('admin');
为什么这行不通?
我也在开发一个电子商务系统,也遇到了同样的问题。我不喜欢管理作为序列化数据存储在数据库中的所有数据,尤其是对于购物车/购物篮,因为它很难查询数据库,我只是觉得它有点乱。
我对 CI 和 stackoverflow 还很陌生,但我的想法是按照文档中的说明设置 ci_session 表,从而保持 CI 会话的一致性和安全性。然后,我只为要管理的每个会话数据向会话变量添加一个参考 ID。例如对于购物车:
$unique_cart_id = random_string('unique');
$this->session->set_userdata('cart_id', $unique_cart_id);
现在我在一个单独的“篮子”表中引用了我的 cart_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)
)
现在,每次有人想向购物篮中添加一些东西时,我都会从会话变量中获取 cart_id:
$cart_id = $this->session->userdata('cart_id');
并$cart_id
通过编写一个小插入脚本将其与任何其他购物车数据一起存储在我的“篮子”表中。
$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_id
再次从会话变量中检索 并查询与 cart_id 匹配的数据库。
$this->db->query("SELECT * FROM basket WHERE cart_id = ?", array($cart_id));
您对其他会话数据、管理员和用户登录使用相同的原则。因此,我只为每个用户保留一个会话 cookie,但我可以在数据库中分别管理每种类型的会话数据。
这只是这个想法的粗略分解。我希望它有所帮助。
Codeigniter 的 session 与 Native PHP Session 完全不同,它非常安全,尤其是在存储在数据库中时。您可以使用 codeigniter 的会话和 Native PHP Session,它们可以很好地协同工作,因为 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'];
}
使用该userdata()
方法,您可以检索在创建会话期间保存的字段。
例如,您传递$array_of_admin_data array
,其中包含一些信息,例如userType
. 如果你想检索这个值,你必须userdata()
这样调用:
$this->session->userdata('userType');
希望,这会有所帮助。