关于PHP和javaScript中共用cookie与session的研究
- 5293
- 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:
//设置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的使用示例