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操作实现点赞功能的更多相关文章

  1. javascript cookie 操作

    <html> <head> <meta charset="utf-8"> <title>Javascript cookie</ ...

  2. javascript cookie操作.

    给cookie追加name: document.cookie="name="+escape("我叫钢蛋");//这里可以不写secape,这样写会更加的安全., ...

  3. Javascript 文件操作(整理版)

    Javascript 文件操作 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.在详细介绍 ...

  4. 学习笔记: JavaScript/JQuery 的cookie操作

    转自:http://blog.csdn.net/barryhappy/archive/2011/04/27/6367994.aspx cookie是网页存储到用户硬盘上的一小段信息.最常见的作用是判断 ...

  5. JavaScript实现评论点赞功能

    通过分析评论功能的逻辑关系,学会如何使用JavaScript实现评论.回复.点赞等各种功能 1.学会JavaScript处理日期和时间. 2.掌握Dom操作中的添加/删除子节点方法. 3.使用setT ...

  6. 【Selenium04篇】python+selenium实现Web自动化:文件上传,Cookie操作,调用 JavaScript,窗口截图

    一.前言 最近问我自动化的人确实有点多,个人突发奇想:想从0开始讲解python+selenium实现Web自动化测试,请关注博客持续更新! 这是python+selenium实现Web自动化第四篇博 ...

  7. jquery.cookie.js 操作cookie实现记住密码功能的实现代码

    jquery.cookie.js操作cookie实现记住密码功能,很简单很强大,喜欢的朋友可以参考下.   复制代码代码如下: //初始化页面时验证是否记住了密码 $(document).ready( ...

  8. PHP与JavaScript下的Cookie操作

    下面的例子列出几种情形交互场景,列出JS和php交互的方法.总结下,以免日后再为cookie问题困扰. setcookie.php getcookie.php 总结: php用自身函数读取php 的c ...

  9. JavaScript能否操作cookie和session?

    JavaScript能否操作cookie和session? 解答:JavaScript可以操作cookie,但是不能操作session

随机推荐

  1. 微信小程序之顶部固定和底部固定

    顶部固定 <view style="position:fixed;top:0;"> ...... </view> 底部固定 <view style=& ...

  2. mysql性能测试(索引)

    首先,使用Talend随机生成一千万条数据: 数据库表中现在有1千万+的数据: mysql> select count(*) from zhangchao; +----------+ | cou ...

  3. 怎么在linux 用nginx做代理 配置.net core

    1. 安装 .net core到centos7 2. 安装nginx 配置代理: vim /opt/nginx/conf/nginx.conf server { listen 80; server_n ...

  4. mysql分享一:运维角度浅谈MySQL数据库优化

    转于:http://lizhenliang.blog.51cto.com/7876557/1657465 1.数据库表设计要合理避免慢查询.低效的查询语句.没有适当建立索引.数据库堵塞(死锁)等 2. ...

  5. Android Webview SSL 自签名安全校验解决方案

    服务器证书校验主要针对 WebView 的安全问题. 在 app 中需要通过 WebView 访问 url,因为服务器采用的自签名证书,而不是 ca 认证,使用 WebView 加载 url 的时候会 ...

  6. javascript读取xml文件读取节点数据的例子

    分享下用javascript读取xml文件读取节点数据方法. 读取的节点数据,还有一种情况是读取节点属性数据. <head> <title></title> < ...

  7. ios使用kvc机制简化对json的解析

    在 ios开发中,我们经常需要对服务器的传回来的json进行解析,特别是对哪些字段特别多的就会又烦躁的情绪.tmd都是一样的东西,要为每个property赋值,真是累人啊.举个简单的例子吧.服务器会过 ...

  8. android源码上面开发App

    使用eclipse 打开源码:http://blog.csdn.net/androidlover1991/article/details/17011991 使用android studio 打开源码h ...

  9. mongoose修改数组中某个特定的值

    写博客的时候有一个这样的业务,一个标签集合和一个文章集合,它们是多对多的关系,文章集合中tags字段包含它对应的标签,现在修改标签集合中某条标签记录的名字,文章集合中所有包含这个标签的tags字段的值 ...

  10. Nexus6p:正在下载系统更新,没有进度

    今天想把手头的测试机更新至Android 8.1, 挂上VPN之后,在设置里点击系统更新,等了半天还是这个样子... 进度条死活不动,我也是醉了,后来找到了一个可行的办法: 先从设置里面的安全和位置性 ...