js利用cookie来提示用户的输入记录

一、需求说明

在输入框中当输入搜索关键字时,客户希望关联提示前几次输入的搜索关键字。

二、实现思路

Ø 方案一:运用cookie来存储用户输入的关键字 

优点:

l     可配置到期规则 Cookie 可以在浏览器会话结束时到期,或者可以在客户端计算机上无限期存在,这取决于客户端的到期规则。

l        不需要任何服务器资源 Cookie 存储在客户端并在发送后由服务器读取。

l         简单性 Cookie 是一种基于文本的轻量结构,包含简单的键值对。

l         数据持久性 虽然客户端计算机上 Cookie 的持续时间取决于客户端上的 Cookie 过期处理和用户干预,Cookie 通常是客户端上持续时间最长的数据保留形式。

  缺点:

  l        大小受到限制 大多数浏览器对 Cookie 的大小有 4096 字节的限制,尽管在当今新的浏览器和客户端设备版本中,支持 8192 字节的 Cookie 大小已愈发常见。

l        用户配置为禁用 有些用户禁用了浏览器或客户端设备接收 Cookie 的能力,因此限制了这一功能。

l         潜在的安全风险 Cookie 可能会被篡改。用户可能会操纵其计算机上的 Cookie,这意味着会对安全性造成潜在风险或者导致依赖于 Cookie 的应用程序失败。

另外,虽然 Cookie 只能被将它们发送到客户端的域访问,历史上黑客已经发现从用户计算机上的其他域访问 Cookie 的方法。您可以手动加密和解密Cookie

但这需要额外的编码,并且因为加密和解密需要耗费一定的时间而影响应用程序的性能。

Ø 方案二:在数据库中存储用户的输入的关键字(1、运用ajax来加载输入的数据2、将用户输入的数据输出到文件中,一次返回给客户端)

   优点:

l 数据存储在服务器端相对与cookie来说比较安全

l 可以实时的得到用户的搜索动向

   缺点:

l 需要频繁的访问数据库,增加服务器的负担

l 具有延迟性

Ø 总体分析:提示性关键字,不包含一些敏感信息(例如:用户名等),所以采取方案一来解决这个问题。


使用配置

Ø 源码存放路径  cookie_input_think/src

 

Ø Index.html  中的配置

1、引入js文件

<script type="text/javascript" src="js/prompt.js"></script>

2、初始化方法

 var prompt = new Prompt({
	cookieId:"searchId",//cookie唯一标示符
	keepDays:3 //保存天数
});	

3、调用例子

//调用例子		
	$('.save').click(function(){ //保存cookie的方法
		prompt.addHistory($.trim($(".search").val()));
	});		
	$('.search').keyup(function(){ //联想
		    var data = prompt.getData();
			//console.log(data);
			//console.log(data.toString());
			if(data == ""){
				return;
			}
			//console.log(data.toString());
			var keyword = $(".search").val();
			var html = "";
			for(var i=0; i < data.length && $.trim(keyword) != ""; i++){
				var keydata = data[i];
				//console.log(keydata);
				if(keydata.indexOf(keyword)>-1){
					html+=keydata;
					html+=",";
				}
			}
			$(".keyword").text(html);	
	});		

js代码 prompt.js

/**
*构造函数
*@param data = {cookieId:"searchId", keepDays:7}
*/
function Prompt(data){
	this.cookieId = data.cookieId; //cookie唯一标识
	this.keepDays = data.keepDays; //cookie保质期
}
/**
*追加cookie里的值
*@param keyword 需要追加的值
*/
Prompt.prototype.addHistory = function(keyword){
	if($.trim(keyword)==""){
			return;
	}
	var stringCookie = unescape(this.getCookie(this.cookieId));
	var str = "";
	if(stringCookie != ""){
		str = stringCookie;
	}
	str = str+keyword+",";
	this.setCookie(escape(this.noRepeat(str)));
}

/**
* 设置cookie
*/
Prompt.prototype.setCookie = function(value){
	var exdate = new Date();
	exdate.setDate(exdate.getDate+this.keepDays);
	var cookieVal = this.cookieId+'='+value+';expires='+exdate.toGMTString();
	document.cookie=cookieVal;
}

/**
* 获取cookie里的值
* @return ['房哥','房姐','御姐','屌丝']
*/
Prompt.prototype.getData = function(){
	var data = unescape(this.getCookie());
	data = data.substring(0, data.length-1).split(",")
	return data;
}
/**
* 删除当前选中的值 例如:删除 '房姐'  resetData('房姐')
*/
Prompt.prototype.resetData = function(keyword){
	this.removeCookie(this.cookieId, keyword);
}

Prompt.prototype.removeCookie = function(keyword){
	var data = unescape(this.getCookie()).split(",");
	var newData = "";
	for(var i=0; i<data.length;i++){
		if(data[i] !="" && data[i] != keyword){
			newData = newData + data[i] + ",";
		}
	}
	this.setCookie(escape(newData));
}  


Prompt.prototype.getCookie = function(){
	if (document.cookie.length>0){
		c_start=document.cookie.indexOf(this.cookieId + "=")
		if (c_start!=-1){ 
			c_start=c_start + this.cookieId.length+1 
			c_end=document.cookie.indexOf(";",c_start)
			if (c_end==-1) c_end=document.cookie.length
			   return document.cookie.substring(c_start,c_end)
		} 
	 }
	return ""
} 

/**
* 去除重复值
*@param str ['御姐','御姐','房姐','房哥']
*@return ['御姐','房姐','房哥']
*/
Prompt.prototype.noRepeat = function(str){
	var data = str.split(",");
	var newData = "";
	for(var i=0; i<data.length; i++){
		if(!(newData.indexOf(data[i])>-1)){
			newData = newData + data[i]+",";
		}
	}
	return newData;
}



整个页面代码 index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>搜索输入联想cookie的实现</title>
<script type="text/javascript" src="js/prompt.js"></script>
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
</head>
<body>
说明:点击搜索按钮时保存关键词,当在词输入时将联想上次输入的关键字<br />
搜索:<input type="text" class="search" value=""/>
    <input type="button" class="save" value="点击保存搜索关键字"/>
<br />
关键字:<br />
<div class="keyword"></div>
<script type="text/javascript">
    var prompt = new Prompt({
				cookieId:"searchId",//cookie唯一标示符
				keepDays:3 //保存天数
			});
	
	//调用例子		
	$('.save').click(function(){ //保存cookie的方法
		prompt.addHistory($.trim($(".search").val()));
	});		
	$('.search').keyup(function(){ //联想
		    var data = prompt.getData();
			//console.log(data);
			//console.log(data.toString());
			if(data == ""){
				return;
			}
			//console.log(data.toString());
			var keyword = $(".search").val();
			var html = "";
			for(var i=0; i < data.length && $.trim(keyword) != ""; i++){
				var keydata = data[i];
				//console.log(keydata);
				if(keydata.indexOf(keyword)>-1){
					html+=keydata;
					html+=",";
				}
			}
			$(".keyword").text(html);	
	});		
</script>    
</body>
</html>




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值