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 相关文章推荐
我的论坛源代码(三)
Oct 09 PHP
php中使用临时表查询数据的一个例子
Feb 03 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
PHP判断网络文件是否存在的方法
Mar 12 PHP
php生成二维码
Aug 10 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
Yii2使用表单上传文件的实例代码
Aug 03 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
PHP防止sql注入小技巧之sql预处理原理与实现方法分析
Dec 13 PHP
php提高脚本性能的4个技巧
Aug 18 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
Cakephp 执行主要流程
2010/03/24 PHP
改写函数实现PHP二维/三维数组转字符串
2013/09/13 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
javascript基础第一章 JavaScript与用户端
2010/07/22 Javascript
js 调用百度地图api并在地图上进行打点添加标注
2014/05/13 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
JavaScript仿微博输入框效果(案例分析)
2016/12/06 Javascript
JavaScript自动点击链接 防止绕过浏览器访问的方法
2017/01/19 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
微信小程序实现点赞业务
2021/02/10 Javascript
[01:03:36]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第二场 1月26日
2021/03/11 DOTA
python的id()函数解密过程
2012/12/25 Python
python使用pil生成缩略图的方法
2015/03/26 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
基于Python实现的微信好友数据分析
2018/02/26 Python
使用实现pandas读取csv文件指定的前几行
2018/04/20 Python
python面试题小结附答案实例代码
2019/04/11 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
Python Django框架防御CSRF攻击的方法分析
2019/10/18 Python
解决springboot yml配置 logging.level 报错问题
2020/02/21 Python
解决TensorFlow调用Keras库函数存在的问题
2020/07/06 Python
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
商务英语求职自荐信范文
2013/12/24 职场文书
教师个人的自我评价分享
2014/01/02 职场文书
运动会广播稿50字
2014/01/26 职场文书
综合实践教学反思
2014/01/31 职场文书
函授本科个人自我鉴定
2014/03/25 职场文书
小学班主任评语大全
2014/04/23 职场文书
活动总结格式范文
2014/04/26 职场文书
起诉书范文
2015/05/20 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
Python基础之元类详解
2021/04/29 Python
redis三种高可用方式部署的实现
2021/05/11 Redis
Ajax异步刷新功能及简单案例
2021/11/20 Javascript
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL