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 全角转半角实现代码
May 16 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 PHP
thinkphp3.2.2实现生成多张缩略图的方法
Dec 19 PHP
PHP中调用SVN命令更新网站方法
Jan 07 PHP
PHP获取文件相对路径的方法
Feb 26 PHP
PHP使用逆波兰式计算工资的方法
Jul 29 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
学习php设计模式 php实现命令模式(command)
Dec 08 PHP
ThinkPHP 3.2.2实现事务操作的方法
May 05 PHP
php实现映射操作实例详解
Oct 02 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
Aug 07 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
Cannot modify header information错误解决方法
2008/10/08 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
PHP获取当前所在目录位置的方法
2014/11/26 PHP
浅谈php中include文件变量作用域
2015/06/18 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
Js callBack 返回前一页的js方法
2008/11/30 Javascript
JavaScript 基础问答三
2008/12/03 Javascript
js中匿名函数的N种写法
2010/09/08 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
2016/02/25 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
微信小程序实现点击按钮修改字体颜色功能【附demo源码下载】
2017/12/05 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
vue实现的上传图片到数据库并显示到页面功能示例
2018/03/17 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
JS实现音量控制拖动
2020/01/15 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
python利用OpenCV2实现人脸检测
2020/04/16 Python
python3调用百度翻译API实现实时翻译
2018/08/16 Python
Python 使用类写装饰器的小技巧
2018/09/30 Python
python3使用GUI统计代码量
2019/09/18 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
初中生三年学习生活的自我评价
2013/11/03 职场文书
《小壁虎借尾巴》教学反思
2014/02/16 职场文书
党校学习心得体会范文
2014/09/09 职场文书
结婚保证书(卖身契)
2015/02/26 职场文书
2015社区健康教育工作总结
2015/05/20 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
实例详解Python的进程,线程和协程
2022/03/13 Python
Redis配置外网可访问(redis远程连接不上)的方法
2022/12/24 Redis