关于PHP和javaScript中共用cookie与session的研究
- 5350
- PHP
- 2
- super_dodo
- 2015/10/13
关于cookie和session的机制就不多记录,直接进入主题。
最近遇到一个问题主要是为了实现用户分享出一篇文章后,他们的朋友阅读该文章,首次阅读的时候他得到奖励,他朋友多次刷新的时候就不予以赠送。(有多种方法可实现该功能需求,A借助数据库记录判断(开销太大且阅读者需要标识ip等。不建议用) B,利用本地缓存localStroage和ajax实现,C本地缓存和url跳转参数实现,D使用cookie和localStroage如下。)
想了一些办法,使用到localStroage和页面的cookie等方法。其中一个环节主要是用想让php和js共用cookie然后实现一个奖励的标识的功能。
那么首先是研究cookie的共用吧:前提是假设浏览器能够接收所有cookie.先写几个公共常用的js操作cookie的方法:js中设置cookie、删除cookie、读取cookie:
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 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | //设置Cookie function setCookie(name, value, iDay){ var oDate = new Date (); oDate.setDate(oDate. getDate ()+iDay); document.cookie = name+ '=' +value+ ';expires=' +oDate; } //获取Cookie function getCookie(name){ //cookie 格式:name=kk; pass=123 var arr = document.cookie.split( '; ' ); for ( var i=0;i<arr.length;i++ ){ var arr2 = arr[i].split( '=' ); if ( arr2[0] == name ){ return arr2[1]; } } return '' ; } //删除Cookie function removeCookie(name){ setCookie(name, '1' ,-1); //设置过期时间为负值(小于当前时间就OK) } [/php] js中怎么设置和获得cookie: [php] //js中怎么设置和获得cookie window.onload = function () { alert( document.cookie ); setCookie( 'dodo' , 'dodo' , 3600); setCookie( 'book' , 'book' , 3600); alert(document.cookie); } //打印出来的结果是这个样子的:dodo=dodo; book=book; //注意:两个值之间的分割是一个分号+一个空格 [/php] 4,php中接收cookie: [php] //php中接收cookie if (isset( $_COOKIE [ 'dodo' ])){ echo $_COOKIE [ 'dodo' ]; } if (isset( $_COOKIE [ 'book' ])){ echo $_COOKIE [ 'book' ]; } [/php] 在网页中打印出了这个值,这说明了我们可以通过cookie来实现js和php的通信,也说明了js和php共用cookie的原理。 关于js和php中session的共用,这个得在设置session页面里面下一个种子,然后通过js来获取,之后在php页面再获取到之后重新设置,这样的话花销比较大,一般需要的话最好是通过cookie来了,而且session的共用的机制个人的做法不同,这里不做记录是因为我觉得如果可以互通cookie的话那么就用cookie了,因为session本身也是要依赖于cookie的,所以其本质一样但是实现的时候花销后者还大些,所以我觉得没有必要故不做记录。。。。 贴一段我自己的代码示例: [php] <script type= "text/javascript" > //设置Cookie function setCookie(name, value, iDay){ var oDate = new Date (); oDate.setDate(oDate. getDate ()+iDay); document.cookie = name+ '=' +value+ ';expires=' +oDate; } //获取Cookie function getCookie(name){ //cookie 格式:name=kk; pass=123 var arr = document.cookie.split( '; ' ); for ( var i=0;i<arr.length;i++ ){ var arr2 = arr[i].split( '=' ); if ( arr2[0] == name ){ return arr2[1]; } } return '' ; } //删除Cookie function removeCookie(name){ setCookie(name, '1' ,-1); //设置过期时间为负值(小于当前时间就OK) } //检测是否支持本地存储 if (window.localStorage){ var dodobook = localStorage.dodobook; var curUrl = document.URL; //得到当前的url if (!dodobook){ //不存在本地存储的情况下,去请求增加用户金钱的接口 alert( '这是你第一次阅读该文章...恭喜你...' ); var taskId = "<?php echo $_GET['task_id'];?>" ; setCookie( 'dodobook_task_id' ,taskId,604800); //有效期一周7天 localStorage.dodobook = curUrl; } else { alert( '你已经是第二次重复阅读该页面了...阅读无效...' ); setCookie( 'dodobook_task_id' , '0' ,604800); //有效期一周7天 } } else { alert( '页面不支持HTML5的localStorage功能...阅读无效...' ); } </script> //php的代码 $dodo_flag = isset( $_COOKIE [ 'dodobook_task_id' ]) ? $_COOKIE [ 'dodobook_task_id' ] : '0' ; echo $dodo_flag ; |
每天说一句:念念不忘、必有回响。。。。加油!!
相关阅读
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
热门文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例
最新文章
- 通过Google API客户端访问Google Play帐户报告PHP库
- PHP执行文件的压缩和解压缩方法
- 消息中间件MQ与RabbitMQ面试题
- 如何搭建一个拖垮公司的技术架构?
- Yii2中ElasticSearch的使用示例