我想制作一个电子商务网站,并且不想强迫用户拥有一个帐户来购买商品,只要他们愿意,他们就可以这样做。
我可以使用CodeIgniter中的sessions类来执行此操作,并能够将用户会话(即他们的购物车项目)保持一段时间(可能是6个月或一年)吗?我阅读了有关会话的CI的用户指南,并说它通过在配置文件中将session_expire_on_close变量设置为false来为您提供设置会话未过期的选项,我猜测即使在用户关闭之后会话也会保持运行浏览器。
每当用户访问该网站或向他们的购物篮添加内容时,我都可以开始会话。然后当他们离开并决定回来时,我可以从我的数据库中的会话表中验证他们的购物车信息并将其返还给他们。
我还想知道是否应该将购物车项目存储在ci_sessions表中,并在user_data列的用户指南中作为示例给出?这就足够了吗?
只想知道我是否朝着正确的方向前进。谢谢
答案 0 :(得分:3)
简短回答:是的,你走的是正确的道路。
我是怎么做的(其中一些可能很明显):
将session
库添加到config/autoload.php
,以便自动启动。
根据需要在config/config.php
设置“会话变量”部分 - sess_expiration = some long time
,sess_expire_on_close = false
,use_database = true
等。
为简单起见,只在会话中存储产品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);
}
使用会话中的product_ids从数据库中提取更多详细信息(例如产品名称)并在屏幕上显示。
由于CI保留了自己的session_id,因此每次用户重新访问您的站点时,此方法都应自动重新填充会话,您不需要手动查询ci_sessions表或使用标准PHP会话。
上面没有经过测试,但希望它有所帮助,如果有任何需要澄清的话会大喊。
答案 1 :(得分:0)
CodeIgniter利用自己的会话(see this),不会干扰PHP sessions。
因此,您可以使用常规PHP会话
session_start();
创建或重新打开现有会话,该ID存储在cookie中(通常为PHPSESSID
)。然后使用该会话而不是CodeIgniter的一个
$_SESSION['MyData'] = 12345;
也许您可以在CodeIgniter配置中检查cookie名称在config.php sess_cookie_name
中不会发生冲突。