修改一句代码 实现购物车退出不清空[转载+修改]
2011-07-19 06:48
375 查看
效果 只要IP 不变 购物车中的商品就不会消失
当然其他判断方式 大家可以举一反三
方法一
有人提到 相同IP 购买混淆的问题
确实会存在这样的问题
可以参考这个方法 那就是只保留登陆过用户的数据
方法二
代码修改为
暂时的解决方法是将这句话注释掉,测试可以了,不过这样的话购物车的信息会越来越庞大,也是有一定的缺陷的,所以还要在看看是不是要对购物车的清除函数clear_cart()进行修改优化。
方法三
找到代码
修改为 也就是把 define('SESS_ID', $sess->get_session_id());注释掉
然后在文件尾添加代码
继续完善
方法四 慎用 该方法会导致购物车混乱。
有用户反映到 会员推出后购物车不会清空 其实个人觉得这个没有什么影响
不过既然有人需要 我还是提出一个解决方法
方法和上面一种类似 只不过多一个判断
也是在文件尾加上代码
并提供四种方案供大家选择使用!
方法一 只判断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()); }
相关文章推荐
- 三种方法实现ecshop购物车退出不清空
- ecshop 实现购物车退出不清空
- 三种方法实现ecshop购物车退出不清空
- 利用python实现简单的循环购物车功能示例代码
- 用c#实现拍拍抢拍精灵实现过程--核心代码--腾讯qq拍拍网秒杀器代码【欢迎转载】
- 网上代码研究后修改的PHP登录程序,关闭浏览器session清空,可以设置cookies时间
- 在windows下修改右键菜单以实现使用vs2010快速编译代码
- js实现的八点拖动修改div大小的代码
- jQuery一句代码实现返回顶部功能
- Windows服务用C++代码实现的一些操作-1:修改服务启动类型
- 动态修改其它进程的代码,实现DLL注入
- Android用PhoneGap封装webapp在android代码中实现连按退出和loadingpage
- [转载]用verilog写一段代码,实现消除一个glitch
- ListView实现购物车功能包含单选与多选和修改数量
- wpf创建命令代码,实现一个清空的命令
- JS 修改URL参数(实现代码)
- .net数据持久化封装 -如何通过修改IL代码实现
- 使用自定义标签实现JSP页面和代码的分离 - Q.yuhen(转载)
- Lc.exe已退出 代码为-1 (可以实现的解决方案)
- 我转载的文章《.NET中统一的存储过程调用方法 》具体实现代码