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
其他功能
Oct 09 PHP
PHP中遍历stdclass object的实现代码
Jun 09 PHP
php去除重复字的实现代码
Sep 16 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
基于Discuz security.inc.php代码的深入分析
Jun 03 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
Mar 07 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
thinkphp在php7环境下提示Cannot use ‘String’ as class name as it is reserved的解决方法
Sep 30 PHP
PHP实现的文件上传类与用法详解
Jul 05 PHP
php readfile()修改文件上传大小设置
Aug 11 PHP
Laravel中为什么不使用blpop取队列详析
Aug 01 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
德生H-501的评价与改造
2021/03/02 无线电
PHP Parse Error: syntax error, unexpected $end 错误的解决办法
2012/06/05 PHP
PHP实现下载功能的代码
2012/09/29 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
JavaScript中的Screen屏幕对象
2008/01/16 Javascript
SharePoint 客户端对象模型 (一) ECMA Script
2011/05/22 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
使用CSS样式position:fixed水平滚动的方法
2014/02/19 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
2014/09/25 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
使用BootStrap实现标签切换原理解析
2017/03/14 Javascript
Vue的Class与Style绑定的方法
2017/09/01 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
bootstrap动态调用select下拉框的实例代码
2018/08/09 Javascript
cdn模式下vue的基本用法详解
2018/10/07 Javascript
谈谈为什么你的 JavaScript 代码如此冗长
2019/01/30 Javascript
layui固定下拉框的显示条数(有滚动条)的方法
2019/09/10 Javascript
《javascript设计模式》学习笔记七:Javascript面向对象程序设计组合模式详解
2020/04/08 Javascript
Python实现二分法算法实例
2015/02/02 Python
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
python逆序打印各位数字的方法
2018/06/25 Python
python字符串循环左移
2019/03/08 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
Joules官网:女士、男士和儿童服装和鞋类
2018/10/23 全球购物
销售行业个人求职自荐信
2013/09/25 职场文书
优秀士兵个人事迹材料
2014/01/19 职场文书
运动会广播稿150字
2014/02/19 职场文书
扩大国家免疫规划实施方案
2014/03/21 职场文书
《赠汪伦》教学反思
2014/04/12 职场文书
订货会主持词
2015/07/01 职场文书
docker-compose部署Yapi的方法
2022/04/08 Servers