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通过COM使用ADODB的简单例子
Dec 31 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
解决PHP4.0 和 PHP5.0类构造函数的兼容问题
Aug 01 PHP
PHP中判断变量为空的几种方法分享
Aug 26 PHP
php调用c接口无错版介绍
Mar 11 PHP
thinkphp实现上一篇与下一篇的方法
Dec 08 PHP
php+mysql实现用户注册登陆的方法
Jan 03 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
php文件操作相关类实例
Jun 18 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
Dec 23 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 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 无线电
超级实用的7个PHP代码片段分享
2012/01/05 PHP
php新浪微博登录接口用法实例
2014/12/23 PHP
php中二维数组排序问题方法详解
2015/08/28 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
JQuery遍历DOM节点的方法
2015/06/11 Javascript
基于Jquery easyui 选中特定的tab
2015/11/17 Javascript
jQuery插件imgPreviewQs实现上传图片预览
2016/01/15 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
vue组件的写法汇总
2018/04/12 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
简单两步使用node发送qq邮件的方法
2019/03/01 Javascript
详解如何在vue+element-ui的项目中封装dialog组件
2020/12/11 Vue.js
[01:16:16]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第二场 1月8日
2021/03/11 DOTA
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Python和Perl绘制中国北京跑步地图的方法
2016/03/03 Python
python实现简单登陆流程的方法
2018/04/22 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
python开启摄像头以及深度学习实现目标检测方法
2018/08/03 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
Python实现按逗号分隔列表的方法
2018/10/23 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
Flask-WTF表单的使用方法
2019/07/12 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
python+selenium爬取微博热搜存入Mysql的实现方法
2021/01/27 Python
压铸汽车模型收藏家:Diecastmodelswholesale.com
2016/12/21 全球购物
应聘自荐书
2013/10/08 职场文书
前台接待岗位职责
2013/12/03 职场文书
2014年安置帮教工作总结
2014/12/11 职场文书
小学生读书笔记范文
2015/06/30 职场文书
python机器学习实现oneR算法(以鸢尾data为例)
2022/03/03 Python
面试分析分布式架构Redis热点key大Value解决方案
2022/03/13 Redis