JavaScript cookie操作实现点赞功能
参考实现原理,但是代码不够简洁,简洁代码参考:js操作cookie
实现一个点赞功能十分简单,主要问题在于不能重复点赞。
若是一个有用户的网站,可以通过数据库设计记录用户的点赞,这是可行的。
但是若是一个不记名的网站,如何记录一个用户呢?
这里有两种方法:
第一种是利用IP,维护一个IP表,记录点赞过的用户,防止该IP重复点赞,问题是IP可能会更换。
第二种是利用cookie,通过一个cookie标注一个用户,防止重复点赞,问题是cookie是可以修改的。
对于一个单纯的只需要展示热度的网站,利用IP或cookie实现点赞都是可以接受的。因为很少有人会无聊的利用这些缺陷刷赞。
这里给出利用js操作cookie实现点赞的代码。
首先约定cookie中点赞的格式为
“star”:”1,2,3…”
前台html(这里使用了TP的模板渲染,并用了bootstrap图标)
<div class="file-star" onclick="addStar({$f[id]})">
<a href="javascript:void(0)">
<span id="star{$f[id]}" class="glyphicon glyphicon-star-empty"> {$f[star]}</span>
</a>
</div>
- 1
- 2
- 3
- 4
- 5
实现点赞的js函数
/*
* 实现点赞功能
* @param 资源id
* */
function addStar(id){
var star=getCookieById("star",id);
if(star==""){
addCookieById("star",id,365);
//后台点赞操作
$.ajax({
.....
})
}else{
alert("您已经点赞过啦!");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
addstar中调用的操作cookie的函数如下
/*
* 获取特定cookie的值
* @param cookie键
* @return cookie该键对应的值
* */
function getCookie(cname){
var name=cname+"=";
var ca=document.cookie.split(';');
for(var i=0;i<ca.length;i++){
var c=ca[i].trim();
if(c.indexOf(name)==0)
return c.substring(name.length,c.length);
}
return "";
}
/*
* 判断cookie键中是否有某个资源的id
* @param cookie键
* @param 查询资源id
* @return 存在返回true,否则返回""
* */
function getCookieById(cname,id){
var name=cname+"=";
var ca=document.cookie.split(';');
var cValue="";
for(var i=0;i<ca.length;i++){
var c=ca[i].trim();
if(c.indexOf(name)==0)
cValue=c.substring(name.length,c.length);
}
if(cValue!=""){
var cArray=cValue.split(",");
for(var i=0;i<cArray.length;i++){
var c=cArray[i].trim();
if(c.indexOf(id)==0){
return true;
}
}
}
return "";
}
/*
* 添加某个资源id到cookie键中
* @param cookie键名
* @param 资源id
* @param cookie过期时间
* */
function addCookieById(cname,id,exdays){
var cvalue=getCookie(cname);
if(cvalue==""){
cvalue=id;
}else {
var cArray=cvalue.split(",");
var flag=0;
for(var i=0;i<cArray.length;i++){
var c=cArray[i].trim();
if(c.indexOf(id)==0){
flag=1;
break;
}
}
if(flag==0) {
cvalue += "," + id;
}
}
var d=new Date();
d.setTime(d.getTime()+(exdays*24*60*60*1000));
var expires="expires="+d.toGMTString();
document.cookie=cname+"="+cvalue+"; "+expires;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
当用户重新刷新后,也要正确显示是否点赞否个资源,所以在body的onload中添加starInit()函数
<body onload="starInit()">
...
</body>
- 1
- 2
- 3
starInit函数
/*
* 页面刷新时正确显示是否点赞了某个资源
* */
function starInit(){
var star=getCookie("star");
if(star!=""){
var cArray=star.split(",");
for(var i=0;i<cArray.length;i++){
var id=cArray[i].trim();
$("#star"+id).attr("class","glyphicon glyphicon-star");
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
JavaScript cookie操作实现点赞功能的更多相关文章
- javascript cookie 操作
<html> <head> <meta charset="utf-8"> <title>Javascript cookie</ ...
- javascript cookie操作.
给cookie追加name: document.cookie="name="+escape("我叫钢蛋");//这里可以不写secape,这样写会更加的安全., ...
- Javascript 文件操作(整理版)
Javascript 文件操作 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.在详细介绍 ...
- 学习笔记: JavaScript/JQuery 的cookie操作
转自:http://blog.csdn.net/barryhappy/archive/2011/04/27/6367994.aspx cookie是网页存储到用户硬盘上的一小段信息.最常见的作用是判断 ...
- JavaScript实现评论点赞功能
通过分析评论功能的逻辑关系,学会如何使用JavaScript实现评论.回复.点赞等各种功能 1.学会JavaScript处理日期和时间. 2.掌握Dom操作中的添加/删除子节点方法. 3.使用setT ...
- 【Selenium04篇】python+selenium实现Web自动化:文件上传,Cookie操作,调用 JavaScript,窗口截图
一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第四篇博 ...
- jquery.cookie.js 操作cookie实现记住密码功能的实现代码
jquery.cookie.js操作cookie实现记住密码功能,很简单很强大,喜欢的朋友可以参考下. 复制代码代码如下: //初始化页面时验证是否记住了密码 $(document).ready( ...
- PHP与JavaScript下的Cookie操作
下面的例子列出几种情形交互场景,列出JS和php交互的方法.总结下,以免日后再为cookie问题困扰. setcookie.php getcookie.php 总结: php用自身函数读取php 的c ...
- JavaScript能否操作cookie和session?
JavaScript能否操作cookie和session? 解答:JavaScript可以操作cookie,但是不能操作session
随机推荐
- 《深入理解jvm》笔记---第六章
类文件结构 1. Java一次编写,到处执行的基石: Java编译产生的是字节码(bytecode).sun公司和其它虚拟机提供商公布各个平台上的虚拟机.这些虚拟机能够加载和执行这些与平台无关的 ...
- Android应用一般上架流程
Android App上架所需文件 上架准备 App文件: 1. 安装包 2. 应用商标:图片格式KB. 3. 应用截图(4~6张):图片格式JPG或者PNG.图片大小480*800,且每张大小一致 ...
- 初学FPGA
刚开始感觉FPGA不过也就是和51,ARM单片机那样写写程序就完事了,现在看来根本不是那么回事.从夏宇闻老师的Verilog HDL,黑金教程开始学起,但是感觉看到黑金时序篇时感觉少点什么,原来是缺少 ...
- 深入理解Linux内核-系统调用
系统调用:用户态进程向内核发出的,实现用户态进程调用硬件设备的函数或者中断:优点:使编程更容易,将用户从学习硬件设备的低级编程特性中解放:提高系统到安全性,内核在满足请求之前可以做正确性检查:提高可移 ...
- hdu1542 Atlantis (线段树+扫描线+离散化)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- POJ 1200 Crazy Search(字符串简单的hash)
题目:http://poj.org/problem?id=1200 最近看了一个关于hash的问题,不是很明白,于是乎就找了些关于这方面的题目,这道题是一道简单的hash 字符串题目,就先从他入手吧. ...
- angular的uiRouter服务学习(1)
angular有内置的路由服务$route:angular -- $route API翻译 使用$route可以帮助实现路由的切换,视图的改变,但是这个内置的$route只包含了基本的功能,在很多场合 ...
- ISO27001适用性-导图
大图请戳这里
- [CoreOS 转载] CoreOS实践指南(一)
转载:http://www.csdn.net/article/2014-12-29/2823356 摘要:CoreOS是一个采用了高度精简的系统内核及外围定制的操作系统.ThoughtWorks的软件 ...
- [AWS vs Azure] 云计算里AWS和Azure的探究(2)
Amazon EC2是Elastic Compute Cloud的简称,翻译成中文就是弹性计算云.它是Amazon云里面最基础的内容,也是发展到今天最成熟的部分,通过EC2, 你可以在Amazon的云 ...