效果 只要IP 不变
购物车中的
商品就不会消失
有人提到 相同IP 购买混淆的问题
确实会存在这样的问题
可以参考这个方法 那就是只保留 登陆过 用户的 数据
方法二
代码修改为
暂时的解决方法是将这句话注释掉,测试可以了,不过这样的话购物车的信息会越来越庞大,也是有一定的缺陷的,所以还要在看看是不是要对购物车的清除函数clear_cart()进行修改优化。
方法三
找到代码
然后在 文件尾添加代码
继续完善
方法四 慎用 该方法会导致 购物车混乱。
有用户反映到 会员推出后购物车不会清空 其实个人觉得这个没有什么影响
不过既然有人需要 我还是提出一个解决方法
方法和上面一种类似 只不过多一个判断
也是在文件尾加上代码
并提供四种方案供大家 选择使用!
方法一 只判断IP 只要IP 不相同 就可以保存 而且可以跨浏览器 缺点 可能出现冲突
方法二 不会冲突,但是只有 登录会员的才可以保留
方法三 不会冲突,但是需要浏览器支持cookie,不可以垮浏览器。
方法四 会员根据userid记录购物车信息 登陆后显示用户上次购物车数据 退出 自动清空 普通用户用cookie+ip 记录用户购物车数据 缺点 IP更换后 普通会员购物车数据将无法保留 不过可以尝试 只根据cookie来判断
修改 方法四中的
define('SESS_ID', md5($_COOKIE['randnumber'].real_ip()));
为
define('SESS_ID', md5($_COOKIE['randnumber'])); 这样只要不清空cookie 就一直保存着!
关于 PHP Notice: Undefined index错误的说明
首先,这个不是错误,是warning。
方法二 可以修改为
当然其他判断方式 大家可以举一反三
方法一
修改 init.php
找到
define('SESS_ID', $sess->get_session_id());
修改为
define('SESS_ID', md5(real_ip()));
有人提到 相同IP 购买混淆的问题
确实会存在这样的问题
可以参考这个方法 那就是只保留 登陆过 用户的 数据
方法二
代码修改为
if($_SESSION['user_id']>0){
define('SESS_ID', md5($_SESSION['user_id']));
}else{
define('SESS_ID', $sess->get_session_id());
}
这个时候如果是管理员登陆后台,那么所有用户的购物车都会清空。查找管理员登陆时的代码,发现验证管理员登陆成功的时候,系统调用函数将购物车的一些信息清除了。清除的代码位于根目录下的privilege.php文件:
// 清除购物车中过期的数据
clear_cart();
暂时的解决方法是将这句话注释掉,测试可以了,不过这样的话购物车的信息会越来越庞大,也是有一定的缺陷的,所以还要在看看是不是要对购物车的清除函数clear_cart()进行修改优化。
方法三
找到代码
if (!defined('INIT_NO_USERS'))
{
/* 初始化session */
include(ROOT_PATH . 'includes/cls_session.php');
$sess = new cls_session($db, $ecs->table('sessions'), $ecs->table('sessions_data'));
define('SESS_ID', $sess->get_session_id());
}
修改为 也就是把 define('SESS_ID', $sess->get_session_id());注释掉
if (!defined('INIT_NO_USERS'))
{
/* 初始化session */
include(ROOT_PATH . 'includes/cls_session.php');
$sess = new cls_session($db, $ecs->table('sessions'), $ecs->table('sessions_data'));
//define('SESS_ID', $sess->get_session_id());
}
然后在 文件尾添加代码
if($_COOKIE['randnumber']==""){
setcookie("randnumber",rand(0,1000),time()+86400);
}
define('SESS_ID', md5($_COOKIE['randnumber'].real_ip()));
继续完善
方法四 慎用 该方法会导致 购物车混乱。
有用户反映到 会员推出后购物车不会清空 其实个人觉得这个没有什么影响
不过既然有人需要 我还是提出一个解决方法
方法和上面一种类似 只不过多一个判断
也是在文件尾加上代码
if($_SESSION['user_id']>0){
define('SESS_ID', md5($_SESSION['user_id']));
}else{
if($_COOKIE['randnumber']==""){
setcookie("randnumber",rand(0,1000),time()+86400);
}
define('SESS_ID', md5($_COOKIE['randnumber'].real_ip()));
}
并提供四种方案供大家 选择使用!
方法一 只判断IP 只要IP 不相同 就可以保存 而且可以跨浏览器 缺点 可能出现冲突
方法二 不会冲突,但是只有 登录会员的才可以保留
方法三 不会冲突,但是需要浏览器支持cookie,不可以垮浏览器。
方法四 会员根据userid记录购物车信息 登陆后显示用户上次购物车数据 退出 自动清空 普通用户用cookie+ip 记录用户购物车数据 缺点 IP更换后 普通会员购物车数据将无法保留 不过可以尝试 只根据cookie来判断
修改 方法四中的
define('SESS_ID', md5($_COOKIE['randnumber'].real_ip()));
为
define('SESS_ID', md5($_COOKIE['randnumber'])); 这样只要不清空cookie 就一直保存着!
关于 PHP Notice: Undefined index错误的说明
首先,这个不是错误,是warning。
方法二 可以修改为
if(@$_SESSION['user_id']>0){ //@加入就可以不提示警告错误
define('SESS_ID', md5($_SESSION['user_id']));
}else{
define('SESS_ID', $sess->get_session_id());
}