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 cookie 作用范围?不要在当前页面使用你的cookie
Mar 24 PHP
Windows下安装Memcached的步骤说明
Apr 25 PHP
基于php使用memcache存储session的详解
Jun 25 PHP
PHP中file_get_contents高?用法实例
Sep 24 PHP
thinkphp3.2.2前后台公用类架构问题分析
Nov 25 PHP
PHP Reflection API详解
May 12 PHP
PHP实现仿Google分页效果的分页函数
Jul 29 PHP
php常量详细解析
Oct 27 PHP
PHP简单实现生成txt文件到指定目录的方法
Apr 25 PHP
php使用include 和require引入文件的区别
Feb 16 PHP
详谈php ip2long 出现负数的原因及解决方法
Apr 05 PHP
购物车实现的几种方式优缺点对比
May 02 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 miniBB中文乱码问题解决方法
2008/11/25 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
php使用socket post数据到其它web服务器的方法
2015/06/02 PHP
详解PHP中的null合并运算符
2015/12/30 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
js 覆盖和重载 函数
2009/09/25 Javascript
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
javascript 通用loading动画效果实例代码
2014/01/14 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
用JS生成UUID的方法实例
2016/03/30 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
详解vue.js根据不同环境(正式、测试)打包到不同目录
2018/07/13 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
vant 中van-list的用法说明
2020/11/11 Javascript
Python实现的石头剪子布代码分享
2014/08/22 Python
python进阶教程之循环对象
2014/08/30 Python
Python实现mysql数据库更新表数据接口的功能
2017/11/19 Python
Python使用cx_Freeze库生成msi格式安装文件的方法
2018/07/10 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
python中用logging实现日志滚动和过期日志删除功能
2019/08/20 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
车工岗位职责
2013/11/26 职场文书
安全大检查反思材料
2014/01/31 职场文书
远程培训的心得体会
2014/09/01 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
导游词之泰山玉皇顶
2019/12/23 职场文书
浏览器常用基本操作之python3+selenium4自动化测试(基础篇3)
2021/05/21 Python
python解析json数据
2022/04/29 Python