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 相关文章推荐
[FAQ]PHP中的一些常识:类篇
Oct 09 PHP
提升PHP执行速度全攻略
Oct 09 PHP
1.PHP简介
Oct 09 PHP
php面向对象全攻略 (十六) 对象的串行化
Sep 30 PHP
PHP判断变量是否为0的方法
Feb 08 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
Jul 22 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
Oct 18 PHP
php文件上传类的分享
Jul 06 PHP
PHP编程实现的TCP服务端和客户端功能示例
Apr 13 PHP
PHP封装XML和JSON格式数据接口操作示例
Mar 06 PHP
Yii框架通过请求组件处理get,post请求的方法分析
Sep 03 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截取字符串函数分享(截取中文字符串)
2014/03/13 PHP
php 使用array函数实现分页
2015/02/13 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
php生成微信红包数组的方法
2019/09/05 PHP
php策略模式简单示例分析【区别于工厂模式】
2019/09/25 PHP
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
Javascript中3种实现继承的方法和代码实例
2014/08/12 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
jQuery制作效果超棒的手风琴折叠菜单
2015/04/03 Javascript
深入分析Javascript跨域问题
2015/04/17 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
js canvas实现红包照片效果
2018/08/21 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
Vue.js实现开发购物车功能的方法详解
2019/02/22 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
VueCli生产环境打包部署跨域失败的解决
2020/11/13 Javascript
[01:14]DOTA2 7.22版本新增神杖效果展示(智力英雄篇)
2019/05/29 DOTA
Python读取mp3中ID3信息的方法
2015/03/05 Python
python 使用get_argument获取url query参数
2017/04/28 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
python制作图片缩略图
2019/04/30 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
HTML5实现页面切换激活的PageVisibility API使用初探
2016/05/13 HTML / CSS
试用期自我鉴定范文
2014/03/20 职场文书
收费员岗位职责
2015/02/14 职场文书
2015年扶贫帮困工作总结
2015/05/20 职场文书
竞选稿之小学班干部
2019/10/31 职场文书
解决Django transaction进行事务管理踩过的坑
2021/04/24 Python