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编写的导航条程序
Oct 09 PHP
php学习之数据类型之间的转换介绍
Jun 09 PHP
深入php list()函数的详解
Jun 05 PHP
php将url地址转化为完整的a标签链接代码(php为url地址添加a标签)
Jan 17 PHP
php解析xml方法实例详解
May 12 PHP
超详细的php用户注册页面填写信息完整实例(附源码)
Nov 17 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
微信公众平台DEMO(PHP)
May 04 PHP
浅谈PHP的数据库接口和技术
Dec 09 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
Sep 30 PHP
YII2框架中添加自定义模块的方法实例分析
Mar 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
让PHP支持页面回退的两种方法
2008/01/10 PHP
PHP中读取文件的8种方法和代码实例
2014/08/05 PHP
ZF框架实现发送邮件的方法
2015/12/03 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
php使用curl伪造浏览器访问操作示例
2019/09/30 PHP
JavaScript为对象原型prototype添加属性的两种方式
2010/08/01 Javascript
THREE.JS入门教程(6)创建自己的全景图实现步骤
2013/01/25 Javascript
jquery 关于event.target使用的几点说明介绍
2013/04/26 Javascript
Javascript合并表格中具有相同内容单元格示例
2013/08/11 Javascript
Angular.js中ng-include用法及多标签页面的实现方式详解
2017/05/07 Javascript
jQuery滚动插件scrollable.js用法分析
2017/05/25 jQuery
vue 实现 tomato timer(蕃茄钟)实例讲解
2017/07/24 Javascript
JavaScript正则表达式校验与递归函数实际应用实例解析
2017/08/04 Javascript
javascript 中模板方法单例的实现方法
2017/10/17 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
python访问纯真IP数据库的代码
2011/05/19 Python
Python实现列表删除重复元素的三种常用方法分析
2017/11/24 Python
python tensorflow学习之识别单张图片的实现的示例
2018/02/09 Python
python抓取网站的图片并下载到本地的方法
2018/05/22 Python
python科学计算之narray对象用法
2019/11/25 Python
python实现智能语音天气预报
2019/12/02 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
vscode调试django项目的方法
2020/08/06 Python
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
销售实习自我鉴定
2013/12/07 职场文书
党支部综合考察材料
2014/05/19 职场文书
新教师培训心得体会
2014/09/02 职场文书
2014年党员学习“三严三实”思想汇报
2014/09/15 职场文书
2015元旦家电促销活动策划方案
2014/12/09 职场文书
公司财务部岗位职责
2015/04/14 职场文书
上学路上观后感
2015/06/16 职场文书
Python使用random模块实现掷骰子游戏的示例代码
2021/04/29 Python
JS数组去重详情
2021/11/07 Javascript
SQL Server中的逻辑函数介绍
2022/05/25 SQL Server