PHP与JavaScript针对Cookie的读写、交互操作方法详解


Posted in PHP onAugust 07, 2017

本文实例讲述了PHP与JavaScript针对Cookie的读写、交互操作方法。分享给大家供大家参考,具体如下:

下面的例子列出几种情形交互场景,列出JS和php交互的方法。总结下,以免日后再为cookie问题困扰。

<?php
 setcookie('php_cn_ck','php_中文_cookie');
 setcookie('php_en_ck','php_english_cookie');
?>
<script src="cookie.js"></script>
<script>
 Cookies.set('js_cn_ck','js_中文_cookie',5000);
 Cookies.set('js_en_ck','js_english_cookie');
</script>

PHP cookie已经设置:
php_cn_ck=php_中文_cookie
php_en_ck=php_english_cookie

JS cookie已经设置:
js_cn_ck=js_中文_cookie
js_en_ck=js_english_cookie

读取cookie

一 读取php传送的中英文cookie

1 php读取php设置php cookie

<?php
 include('function.php');
 $php_cn_ck=$_COOKIE['php_cn_ck'];
 $un_php_cn_ck=unescape($php_cn_ck);
 echo "解码前的中文cookie:php_cn_ck=$php_cn_ck<br><br>";
 echo "解码后的中文cookie:un_php_cn_ck=$un_php_cn_ck<br><br>";
 $php_en_ck=$_COOKIE['php_en_ck'];
 echo "英文cookie无需解码:php_en_ck=$php_en_ck<br><br>";
?>

2 js读取php设置cookie

<script src="cookie.js"></script>
<script>
 php_cn_ck=Cookies.get('php_cn_ck');
 un_php_cn_ck = decodeURIComponent (escape(php_cn_ck));
 document.write("解码前的中文cookie :php_cn_ck="+php_cn_ck+"<Br><br>");
 document.write("解码后的中文cookie :un_php_cn_ck="+un_php_cn_ck+"<Br><br>");
 php_en_ck=Cookies.get('php_en_ck');
 document.write("英文cookie无需解码 :php_en_ck="+php_en_ck+"<Br><br>");
</script>

二 读取JS传送的中英文cookie

1 php读取JS设置js cookie

<?php
 $js_cn_ck=$_COOKIE['js_cn_ck'];
 $un_js_cn_ck=unescape($js_cn_ck);
 echo "解码前的中文cookie:js_cn_ck=$js_cn_ck<br><br>";
 echo "解码后的中文cookie:un_js_cn_ck=$un_js_cn_ck<br><br>";
 $js_en_ck=$_COOKIE['js_en_ck'];
 echo "英文cookie无需解码:js_en_ck=$js_en_ck<br><br>";
?>

2 js读取js设置的cookie

<script>
 js_cn_ck=Cookies.get('js_cn_ck');
 document.write("解码前的中文cookie :js_cn_ck="+js_cn_ck+"<Br><br>");
 //un_js_cn_ck = decodeURIComponent (escape(js_cn_ck)); 调用这两句会出现js解析中断
 //document.write("解码后的中文cookie :un_js_cn_ck="+un_js_cn_ck+"<Br><br>");
 js_en_ck=Cookies.get('js_en_ck');
 document.write("英文cookie无需解码 :js_en_ck="+js_en_ck+"<Br><br>");
</script>

总结:

1. php用自身函数读取php 的cookie,没有任何障碍,无需解码处理。
2. js采用cookie.js方法读取js 的cookie,没有任何障碍,无需解码处理。
3. js读取php的中文cookie,需要做 "decodeURIComponent (escape(php_cn_ck)) "函数处理
4. php读取js的中文cookie 需要做 "unescape()" 函数处理

cookie.js:

var Cookies = {};
/**
* 设置Cookies
*/
Cookies.set = function(name, value){
 var argv = arguments;
 var argc = arguments.length;
 var expires = (argc > 2) ? argv[2] : null;
 if(expires != null){
  var exp = new Date();
  exp.setTime(exp.getTime() + 8*3600 + expires);
 }
 alert(exp.toGMTString());
 var path = (argc > 3) ? argv[3] : '/';
 var domain = (argc > 4) ? argv[4] : null;
  var secure = (argc > 5) ? argv[5] : false;
 document.cookie = name + "=" + escape (value) +
 ((expires == null) ? "" : ("; expires=" + exp.toGMTString())) +
 ((path == null) ? "" : ("; path=" + path)) +
 ((domain == null) ? "" : ("; domain=" + domain)) +
 ((secure == true) ? "; secure" : "");
};
/**
* 读取Cookies
*/
Cookies.get = function(name){
 var arg = name + "=";
 var alen = arg.length;
 var clen = document.cookie.length;
 var i = 0;
 var j = 0;
 while(i < clen){
  j = i + alen;
  if (document.cookie.substring(i, j) == arg)
  return Cookies.getCookieVal(j);
  i = document.cookie.indexOf(" ", i) + 1;
  if(i == 0)
  break;
 }
 return null;
};
/**
* 清除Cookies
*/
Cookies.clear = function(name) {
 if(Cookies.get(name)){
 var expdate = new Date();
 expdate.setTime(expdate.getTime() - (86400 * 1000 * 1));
 Cookies.set(name, "", expdate);
 }
};
Cookies.getCookieVal = function(offset){
 var endstr = document.cookie.indexOf(";", offset);
 if(endstr == -1){
  endstr = document.cookie.length;
 }
 return unescape(document.cookie.substring(offset, endstr));
};

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP 和 MySQL 基础教程(一)
Oct 09 PHP
Http 1.1 Etag 与 Last-Modified提高php效率
Jan 10 PHP
php读取30天之内的根据算法排序的代码
Apr 06 PHP
php $_SERVER[&quot;REQUEST_URI&quot;]获取值的通用解决方法
Jun 21 PHP
php读取mysql的简单实例
Jan 15 PHP
php smarty truncate UTF8乱码问题解决办法
Jun 13 PHP
五款PHP代码重构工具推荐
Oct 14 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
浅谈Yii乐观锁的使用及原理
Jul 25 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
Laravel timestamps 设置为unix时间戳的方法
Oct 11 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
Aug 07 #PHP
php封装的mongodb操作类代码
Aug 06 #PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 #PHP
php mysql数据库操作类(实例讲解)
Aug 06 #PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 #PHP
PHP实现腾讯与百度坐标转换
Aug 05 #PHP
laravel5.4生成验证码的实例讲解
Aug 05 #PHP
You might like
动态新闻发布的实现及其技巧
2006/10/09 PHP
php下判断数组中是否存在相同的值array_unique
2008/03/25 PHP
php获取通过http协议post提交过来xml数据及解析xml
2012/12/16 PHP
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
jquery $.ajax入门应用二
2008/11/19 Javascript
利用webqq协议使用python登录qq发消息源码参考
2013/04/08 Javascript
jquery删除指定的html标签并保留标签内文本内容的方法
2014/04/02 Javascript
js隐式全局变量造成的bug示例代码
2014/04/22 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
Vue动态实现评分效果
2017/05/24 Javascript
Node.js+jade抓取博客所有文章生成静态html文件的实例
2017/09/19 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
angularjs获取到My97DatePicker选中的值方法
2018/10/02 Javascript
Angular 实现输入框中显示文章标签的实例代码
2018/11/07 Javascript
js字符串倒序的实例代码
2018/11/30 Javascript
通过npm或yarn自动生成vue组件的方法示例
2019/02/12 Javascript
深入理解react 组件类型及使用场景
2019/03/07 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
简单分析js中的this的原理
2019/08/31 Javascript
jquery实现两个div中的元素相互拖动的方法分析
2020/04/05 jQuery
JS加载解析Markdown文档过程详解
2020/05/19 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
[02:04]2018DOTA2亚洲邀请赛Secret赛前采访
2018/04/03 DOTA
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
Django多进程滚动日志问题解决方案
2019/12/17 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
职业技术学校毕业生推荐信
2013/12/03 职场文书
作弊检讨书1000字
2014/02/01 职场文书
入党积极分子学习优秀共产党员先进事迹思想汇报
2014/09/13 职场文书
销售员岗位职责范本
2015/04/11 职场文书
成事在人观后感
2015/06/16 职场文书
狂人日记读书笔记
2015/06/30 职场文书