利用COOKIE保存历史浏览商品的一个简单思路
<?php
//如是COOKIE 里面不为空,则往里面增加一个商品ID
if (!empty($_COOKIE['SHOP']['history'])){ //取得COOKIE里面的值,并用逗号把它切割成一个数组
$history = explode(',', $_COOKIE['SHOP']['history']);
//在这个数组的开头插入当前正在浏览的商品ID
array_unshift($history, $id);
//去除数组里重复的值
$history = array_unique($history);
// $arr = array (1,2,3,1,3);
// $arr = array (1,1,2,3,3);
// $arr = array (1,2,3);
//当数组的长度大于5里循环执行里面的代码
while (count($history) > 5){
//将数组最后一个单元弹出,直到它的长度小于等于5为止
array_pop($history);
}
//把这个数组用逗号连成一个字符串写入COOKIE,并设置其过期时间为30天
setcookie('SHOP[history]', implode(',', $history), $cur_time + 3600 * 24 * 30); }else{
//如果COOKIE里面为空,则把当前浏览的商品ID写入COOKIE ,这个只在第一次浏览该网站时发生
setcookie('SHOP[history]', $id, $cur_time + 3600 * 24 * 30);
} //以上均为记录浏览的商品ID到COOKIE里,下面将讲到怎样用这样COOKIE里的数据
·//取得COOKIE里的数据 ,格式为1,2,3,4 这样,当然也有可以为0
··$history =isset ($_COOKIE['SHOP']['history'][$uid]) ? $_COOKIE['SHOP']['history'][$uid] : 0;
·//写SQL语句,用IN 来查询出这些ID的商品列表
··$sql_history = "SELECT * FROM `goods` WHERE `goods_id` in ({$history})";
·//执行SQL语句,返回数据列表
··$goods_history = $db->getAll($sql_history);
··if ($goods_history) {
····$tpl->assign ('goods_history',$goods_history);
···}
?>
这样的话,其实有个问题会出现,那就是如果这个浏览器一个人刚登陆完了后,退出登录。另一人再次登陆自己的账号,历史浏览记录会“混合”在一起,造成数据的不准确。
最简单的解决办法就是,在存入cookie的时候,带入用户的ID,这样每个用户的历史浏览数据都不一样,也不容易冲突。代码如下:
<?php //假设当前登陆用户的ID是568.
$uid='568';$cur_time=time();
//如是COOKIE 里面不为空,则往里面增加一个商品ID
if (!empty($_COOKIE['SHOP']['history'][$uid])){ //取得COOKIE里面的值,并用逗号把它切割成一个数组
$history = explode(',', $_COOKIE['SHOP']['history']);
//在这个数组的开头插入当前正在浏览的商品ID
array_unshift($history, $id);
//去除数组里重复的值
$history = array_unique($history);
// $arr = array (1,2,3,1,3);
// $arr = array (1,1,2,3,3);
// $arr = array (1,2,3);
//当数组的长度大于5里循环执行里面的代码
while (count($history) > 5){
//将数组最后一个单元弹出,直到它的长度小于等于5为止
array_pop($history);
}
//把这个数组用逗号连成一个字符串写入COOKIE,并设置其过期时间为30天
setcookie("SHOP[history][$uid]", implode(',', $history), $cur_time + 3600 * 24 * 30); }else{
//如果COOKIE里面为空,则把当前浏览的商品ID写入COOKIE ,这个只在第一次浏览该网站时发生
setcookie("SHOP[history][$uid]", $id, $cur_time + 3600 * 24 * 30);
} //以上均为记录浏览的商品ID到COOKIE里,下面将讲到怎样用这样COOKIE里的数据 //取得COOKIE里的数据 ,格式为1,2,3,4 这样,当然也有可以为0
$history =isset ($_COOKIE['SHOP']['history'][$uid]) ? $_COOKIE['SHOP']['history'][$uid] : 0;
//写SQL语句,用IN 来查询出这些ID的商品列表
$sql_history = "SELECT * FROM `goods` WHERE `goods_id` in ({$history})";
//执行SQL语句,返回数据列表
$goods_history = $db->getAll($sql_history);
if ($goods_history) {
$tpl->assign ('goods_history',$goods_history);
}
?>
利用COOKIE保存历史浏览商品的一个简单思路的更多相关文章
- destoon系统开发-最新利用浏览器的cookie 做历史浏览记录
注意: 代码 放在要显示的为 (一般放在详情页),注意本教程不入库,直接利用浏览器的 cookie 缓存判断 <!--历史浏览记录 S--> <div class=&quo ...
- jQuery 操作cookie保存用户浏览信息
使用jQuery操作cookie之前需要引入jQuery的一个cookie小组件js,代码如下: /* jQuery cookie plugins */jQuery.cookie ...
- 利用Cookie保存用户身份信息实现免登录
<%@page import="sun.misc.BASE64Encoder"%> <%@page import="java.util.Base64.E ...
- javascript 制作的美化select,利用cookie保存选择
可以看一下动画 下面是代码 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- Linux 清楚历史history命令的一个简单方法
有时候做了一些历史记录 不想让别人知道, 发现最简单的办法是 set HISTSIZE=0 然后 history 就没有历史记录命令了 然后为了能用上下键进行历史命令使用 再 set HISTSIZE ...
- Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化
Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...
- 鸿蒙系统应用开发之JS实现一个简单的List
在之前的文章鸿蒙应用开发之怎么更好的远程连接手表模拟器做调试里我运行了一个穿戴设备的应用,利用JS UI实现了一个最简单的HelloWorld. 今天我打算在智慧屏设备上利用豆瓣音乐的接口数据实现一个 ...
- Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(无数截图)
[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Window ...
- Windows 上静态编译 Libevent 2.0.10 并实现一个简单 HTTP 服务器(图文并茂,还有实例下载)
[文章作者:张宴 本文版本:v1.0 最后修改:2011.03.30 转载请注明原文链接:http://blog.s135.com/libevent_windows/] 本文介绍了如何在 Window ...
随机推荐
- http协议简析(一)
HTTP:hype-text transfer protocol,超文本传输协议,超文本(html)在网络间(电脑与电脑之间)传输过程中所遵循的一些规则. 两台电脑之间要实现数据传输的条件 1.两台电 ...
- tp5 sql 大于小于
1.大于 $rwhere['ctime'] = array('egt',10000); 2.小于 $rwhere[);
- Docker for mac安装
Mac安装Docker docker下载地址: https://hub.docker.com/editions/community/docker-ce-desktop-mac docker for m ...
- 使用OpenSSL进行转换
使用OpenSSL进行转换 摘自:https://cloud.tencent.com/developer/ask/29886 这些命令允许您将证书和密钥转换为不同的格式,以使它们与特定类型的服务器或软 ...
- JVM致命错误日志(hs_err_pid.log)解读
JVM致命错误日志(hs_err_pid.log)解读 摘自:https://blog.csdn.net/u013938484/article/details/51811400 2016年07月02日 ...
- Rabbit MQ参考资料
https://github.com/ServiceStack/rabbitmq-windows/blob/master/README.md https://github.com/rabbitmq/r ...
- MATLAB搬移到别的电脑出现License Manager Error -9
是注册码的问题,不需要重装,主要是以前的安装包不见了.解决办法: 下一个KeyGen的MLMCrypt.exe文件.运行之后在当前目录下出现一个LICENSE.DAT文件. 复制到matlab.exe ...
- SVN客户端--TortoiseSVN使用说明【转】
TortoiseSVN是windows下其中一个非常优秀的SVN客户端工具.通过使用它,我们可以可视化的管理我们的版本库.不过由于它只是一个客户端,所以它不能对版本库进行权限管理. TortoiseS ...
- GitHub上创建组织
4.3. 组织和团队 GitHub 在早期没有专门为组织提供账号,很多企业用户或大型开源组织只好使用普通用户账号作为组织的共享账号来使用.后来,GitHub推出了组织这一新的账号管理模式,满足大型开发 ...
- Time 模块中asctime()、time()、localtime()、ctime()、gmtime()的用法
Time 模块包含了以下内置函数,既有时间处理的,也有转换时间格式的: time.asctime([tupletime]) 接受时间元组并返回一个可读的形式“Tue Dec 11 18:07:14 2 ...