js操作Cookie,实现历史浏览记录
/**
* history_teacher.jsp中的js,最近浏览名师
* @version: 1.0
* @author: mingming
*/
$(function(){
getHistory();
}); var historyCount=4; //保存历史记录个数 /**
* 增加浏览历史记录
* @param id 编号
* @param name 姓名
* @param photo 照片
* @param grade 年级
* @param subject 科目
* @return
*/
function setHistory(id,name,photo,grade,subject){
stringCookie=getCookie('history');
var stringHistory=""!=stringCookie?stringCookie:"{history:[]}";
var json=new JSONHistory(stringHistory); //转成json
var list = json['history']; //获得json
for (var i = 0; i < list.length; i++) {
try {
if(list[i].id == id){
list.splice(i,1); //删除重复数据,开始位置,删除个数
i=i-1; //下标归位
}
} catch (e) {
break;
}
} if(list.length>=historyCount){
//删除最开始的多余记录
var count = list.length - historyCount + 1; //需要删除的个数
list.splice(0,count); //开始位置,删除个数
} var e="{id:'"+id+"',name:'"+name+"',photo:'"+photo+"',grade:'"+grade+"',subject:'"+subject+"'}";
json['history'].push(e);//添加一个新的记录
setCookie('history',json.toString(),365); //365天
} /**
* 获得浏览历史记录
* @return
*/
function getHistory(){
var historyJSON=getCookie('history');
if(historyJSON==""){
}else{
var data = eval("("+historyJSON+")");
var history = data['history']; //历史记录
var length = history.length;
if(length > historyCount){
length = historyCount;
}
//从最后一个浏览记录开始获取
var historyHtml="";
for ( var i = length-1; i >= 0; i--) {
historyHtml+=
'<dd>'+
'<ul>'+
'<li class="recimg"><a href="'+PATH+"/teacher/teacherinfo?teacherVO.teacherId="+history[i].id+'"><img src="'+PATH + "/"+ history[i].photo +'" alt="" /></a></li>'+
'<li class="recinfo">'+
'<p><a href="'+PATH+"/teacher/teacherinfo?teacherVO.teacherId="+history[i].id+'">'+history[i].name+'</a></p>'+
'<p class="grayp">科目:'+history[i].subject+'</p>'+
'<p class="grayp">年级:'+history[i].grade+'</p>'+
'</li>'+
'</ul>'+
'</dd>';
} if(historyHtml!=""){
$("#historyTeacher").html('<h2>最近浏览名师</h2><dl>'+historyHtml+'</dl>');
}
}
} /**
* 添加cookie
* @param cookName cookie名称
* @param cookName cookie值
* @param expiredays 时长
*/
function setCookie(cookName,cookValue,expiredays){
var exdate=new Date();
exdate.setDate(exdate.getDate()+expiredays*24*3600*1000);
var cookieVal=cookName+ "=" +escape(cookValue)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString())+";path=/";
document.cookie=cookieVal;
} /**
* 获取cookie
* @param cookName cookie名称
* @return
*/
function getCookie(cookName)
{
if(document.cookie.length>0){
var c_start = document.cookie.indexOf(cookName + "=");
if(c_start!=-1){ //存在
c_start = c_start + cookName.length + 1; //"history="后的开始位置
var c_end=document.cookie.indexOf(";",c_start); //找到JSESSIONID在的位置
if (c_end==-1){ //JSESSIONID不存在
c_end=document.cookie.length;
}
return unescape(document.cookie.substring(c_start,c_end));
}
}
return "";
} /**
* JSON
*/
var JSONHistory = function(sJSON){
this.objType = (typeof sJSON);
if(this.objType=='string' && ''==sJSON){
sJSON = '{history:[]}' ;
}
this.self = [];
(function(s,o){
for(var i in o){
o.hasOwnProperty(i)&&(s[i]=o[i],s.self[i]=o[i])
};})(this,(this.objType=='string')?eval('0,'+sJSON):sJSON);
};
JSONHistory.prototype = {
toString:function(){
return this.getString();
},
valueOf:function(){
return this.getString();
},
getString:function(){
var sA = [];
(function(o){
var oo = null;
sA.push('{');
for(var i in o){
if(o.hasOwnProperty(i) && i!='prototype'){
oo = o[i];
if(oo instanceof Array){
sA.push(i+':[');
for(var b in oo){
if(oo.hasOwnProperty(b) && b!='prototype'){
sA.push(oo[b]+',');
if(typeof oo[b]=='object') arguments.callee(oo[b]);
}
}
sA.push('],');
continue;
}else{
sA.push(i+':\''+oo+'\',');
}
if(typeof oo=='object') arguments.callee(oo);
}
}
sA.push('},');
})(this.self);
return sA.slice(0).join('').replace(/\[object object\],/ig,'').replace(/,\}/g,'}').replace(/,\]/g,']').slice(0,-1);
},
push:function(sName,sValue){
this.self[sName] = sValue;
this[sName] = sValue;
}
};
中间对于把历史记录转换为json格式有更简便的方法。这个是个单独案例。
页面引入js,增加浏览历史记录调用
setHistory(id,name,photo,grade,subject)
cookie参数设置:
path:
是相对于应用服务器存放应用的文件夹的根目录而言的(比如tomcat下面的webapp),因此cookie.setPath("/");之后,可以在webapp文件夹下的所有应用共享cookie
测试结果:不设置,则当前目录下所有页面可以访问,设置”/“后,所有页面都可以访问
domain:
在www.baidu.com中设置的cookie,但需要在zhidao.baidu.com下获取,这样就需要Cookie的setDomain()方法了。
cookie.setPath("/");
cookie.setDomain("baidu.com");//只给出域名的相同部分
cookie参数设置参考文档:
js操作Cookie,实现历史浏览记录的更多相关文章
- destoon系统开发-最新利用浏览器的cookie 做历史浏览记录
注意: 代码 放在要显示的为 (一般放在详情页),注意本教程不入库,直接利用浏览器的 cookie 缓存判断 <!--历史浏览记录 S--> <div class=&quo ...
- JS制作一个通用的商城版历史浏览记录
正在开发一个b2c的国外商城,昨天做了一个历史浏览记录发出来跟大家分享一下. JS: //cookie相关函数 function getCookieVal(offset) { var endst ...
- 使用Cookie实现用户商品历史浏览记录
该功能分为四个模块: 1. 获取所有商品并以链接的形式显示 out.write("网站商品: <br/>"); Map<String, Book> book ...
- Cookie实现商品浏览记录--方式二:JS实现
使用Cookie实现商品浏览记录:方式二:JS方法实现cookie的获取以及写入.当某一个产品被点击时,触发JS方法.利用JS方法判断一下,此产品是否在浏览记录中.如果不存在,则将产品ID加入到coo ...
- Django之使用redis缓存session,历史浏览记录,首页数据实现性能优化
Redis缓存session 配置Django缓存数据到redis中 # diango的缓存配置 CACHES = { "default": { "BACKEND&quo ...
- 利用COOKIE保存历史浏览商品的一个简单思路
<?php //如是COOKIE 里面不为空,则往里面增加一个商品ID if (!empty($_COOKIE['SHOP']['history'])){ //取得COOKIE里面的值,并用逗号 ...
- jquery.cookie.js 操作cookie实现记住密码功能的实现代码
jquery.cookie.js操作cookie实现记住密码功能,很简单很强大,喜欢的朋友可以参考下. 复制代码代码如下: //初始化页面时验证是否记住了密码 $(document).ready( ...
- JS操作cookie以及本地存储(sessionStorage 和 localStorage )
JS操作cookie cookie的操作用两种方式 1.substring //创建cookie function setCookie(name,value,expires,path,domain,s ...
- js操作cookie,实现登录密码保存 [转]
转自:http://blog.csdn.net/zyujie/article/details/8727828 ( 谢谢博主了) js操作cookie,实现登录密码保存.cookie的存放方式是以键值对 ...
- 转: js操作cookie
cookie的几个概念 http://dearhappyfish.blog.163.com/blog/static/1901094152012422114753777/ js操作cookie 转:ht ...
随机推荐
- 《University Calculus》-chape8-无穷序列和无穷级数-欧拉恒等式
写在前面:写在前面的当然是对大天朝教材的吐槽啦. 曾记否,高中所学虚数和复平面的概念,如此虚无的概念到了大学一门叫<模拟电子技术>的课程中居然明目张胆的开始进行计算! 曾记否,高中的指对运 ...
- sonarQube 管理
sonarQube是一个管理代码质量的开放平台,它可以从七个维度检测和扫描代码质量 参考百度文库:http://wenku.baidu.com/view/cba28af9b90d6c85ed3ac67 ...
- java web实现 忘记密码(找回密码)功能及代码
java web实现 忘记密码(找回密码)功能及代码 (一).总体思路 (二).部分截图 (三).部分代码 (一).总体思路: 1.在 找回密码页面 录入 姓名.邮箱和验证码,录入后点击[提交]按钮, ...
- c#基础语言编程-序列化
引言 程序员在编写应用程序的时候往往要将程序的某些数据存储在内存中,然后将其写入某个文件或是将它传输到网络中的另一台计算机上以实现通讯.这个将程序数据转化成能被存储并传输的格式的过程被称为" ...
- HTML5简易在线画图工具
继上次学习了HTML5的路径画圆做了动态时钟.异次元空间的反转做了运动的太阳系,这两天将画线.画圆.填充等知识点结合起来做了一个简易的在线画图工具: 查看DEMO:HTML5简易在线画图工具 功能包括 ...
- 工厂模式 - 程序实现(java)
09年5月CSDN一网友提出如下问题: 设计一个用于管理银行客户的类BankCustomer: 仅描述客户的几个重要方面: 帐号.身份证号.姓名.联系方式.密码.账户余额. 所有的成员变量均用priv ...
- PullToRefreshListView调用onRefreshComplete方法 无法取消刷新的bug
我们在使用框架: PullToRefreshListView 实现下拉或者上拉加载时候,可能在上拉 完成时候,调用onRefreshComplete方法去 停止 刷新操作,但是,可能无效,测试产生 ...
- mysql --batch --skip-column-name --execute 使用
mysql -h 127.0.0.1 -P 3306 -u root -p -D test --batch --skip-column-name --execute="select * fr ...
- linux innode图解2
http://www.opsers.org/linux-home/base/the-knowledge-that-one-day-learn-linux-file-system.html 文件系统是操 ...
- XZ压缩
XZ压缩最新压缩率之王 xz这个压缩可能很多都很陌生,不过您可知道xz是绝大数linux默认就带的一个压缩工具. 之前xz使用一直很少,所以几乎没有什么提起. 我是在下载phpmyadmin的时候看到 ...