同一网站不同和二级域名和不同子目录的cookie

news/2024/5/15 23:41:27/文章来源:https://blog.csdn.net/u014538198/article/details/47251945

1、cookie二级域名的实现:

用户其中一个站点登录,而且可以各个子频道间切换,保持登录状态设置Cookie时,使用如下代码即可:
setcookie(name,value,expire,path,"domain.com");
这样,在每个二级域名都能读取这个Cookie的值。 参见:

cookie共享于二级域名

http://lonvea.iteye.com/blog/1160577

一个cookie如上4个重要的属性:

1)maxAge:cookie被客户端保持的时间,单位为(秒),正数表示在指定的秒数后过期被客户端删除,0表示删除此cookie(置空),负数则表示此cookie不会被客户端存储,将在浏览器关闭后清除.

2)domain:cookie可被有效操作的域,可以为ip/hostname等,不过需要声明:*.abc.com,.abc.com,abc.com这三种方式会有区别,客户端会做简单的匹配.多数情况下直接使用abc.com可以接受多级子域名.只有正确匹配domain的cookie才会被发送给server.

3)secure:是否只允许安全加密url访问,默认为false,如果为true,那么cookie只对https/SSL等加密连接才会发送给server.

4)path:cookie对domain何路径下访问有效,"/"表示domain下根目录中所有请求有效,"/open"表示只对domain/open目录下请求有效,如果此path忘记设置,你将遇到一个很尴尬的问题:明明在其他页面设置了cookie输出,但是换个页面却死活不行..

 

domain和path是决定可跨域的2个参数.

对于domain,"abc.com"则可以在abc.com主域名之下的多级子域名有效,".abc.com"只能在二级域名以及"www.abc.com"下有效,其实客户端只是做了简单的匹配..你可以在此基础上做更多的分级控制..

path是个有参考意义的属性,对于部分路径下开放访问的系统有意义,比如:abc.com/open下的程序和登录是开放给特殊开发者接入的,这里的数据活着cookie需要做一些另类的处理..


 

2、同一网站不同子目录的cookie要设置path,才能互相访问。参见: 

cookie path

http://www.cnblogs.com/ainiaa/archive/2011/11/18/2253841.html

以前使用cookie的时候 没有在意path的问题。这次公司商城实现了静态化的功能,多了2级目录。导致了我在商品详情页面设置好的cookie(path为/good/商品ID/)在店铺首页竟然访问不到(店铺首页的path为'/store/')。cookie的名称都是一致的。唯一不同的只有path。在商品详情页设置cookie的时候吧path设置成‘/’,这样修改之后就可以正常的在店铺首页取到设置好的cookie了。

使用关键字 javascript cookie  path 还搜索到了,原来10年来IE一直存在一个cookie path的一个bug(原文地址:http://conkeyn.iteye.com/blog/423549)。

 

手上一个广告项目,在Firefox下顺利测试通过。自信JS代码能兼容IE,FF测试过后随手就仍给CS测试,结果CS反馈说有问题。排查一番, 发现居然和Javascript 设置 Cookie 时的 path 有关。IE下Cookie种在 /或者URL所在路径时正常,如果Cookie值作用域在当前URL下则IE下javascript 无法获取到设置的Cookie值。

看下面演示代码:

 

  1. var cookie_name = "name";  
  2. var cookie_value = "value";  
  3. expires = new Date();  
  4. expires.setTime(expires.getTime() + 86400 * 1000);  
  5.   
  6. // 有Bug document.cookie无法独到cookie_name值  
  7. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)  
  8.         + "; expires=" + expires.toGMTString() + "; path="  
  9.         + window.location.pathname;  
  10. // 正常  
  11. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)  
  12.         + "; expires=" + expires.toGMTString() + "; path=/test/";  
  13. // 正常  
  14. document.cookie = "cookie_name=" + encodeURIComponent(cookie_value)  
  15.         + "; expires=" + expires.toGMTString() + "; path=/";  

 

怀疑是IE的Bug、
在google上 搜了下关键词: ie javascript cookie path bug 
同样的问题在罪与罚 的博客上也有描述,而且博主联系过微软IEBLOG 的Eric。得到的回复是:

You have uncovered an IE bug where cookies that are set with a path that contains a filename (e.g. /page.htm) are not accessible to the document.cookie function, although they are correctly sent to the server in the HTTP header. This has been broken for at least 10 years and unfortunately probably will not be fixed in IE8.

Thanks,

-Eric

一个存在10年的Bug。。。而且IE8也不会修复,实在是无语。

需求是cookie值只对当前页面有效,没办法只好用替代方案,看代码:

 

  1. //IE Cookie Bug 替代方案  
  2. var cookie_path = window.location.pathname;  
  3. var cookie_name = encodeURIComponent(cookie_path.substring(cookie_path  
  4.         .lastIndexOf('/') + 1));  
  5. cookie_path = cookie_path.substring(0, cookie_path.lastIndexOf('/') + 1);  
  6. var cookie_value = "value";  
  7. expires = new Date();  
  8. expires.setTime(expires.getTime() + 86400 * 1000);  
  9.   
  10. document.cookie = cookie_name + "=" + encodeURIComponent(cookie_value)  
  11.         + "; expires=" + expires.toGMTString() + "; path=" + cookie_path;  

 替代方案根据每个页面的URL文件名来做Cookie名,有效范围在当前页路经下。
如:url 等于 /test/test.html
则cookie名为test.html,有效路径为/test/
这样也可以做到同一个js部署在每个页面上能读到只对当前URL有效的cookie值。代价是当用户在同一级目录下访问很多页面时会导致cookie值不 断增大。结果是当前路径下的每个http请求都带很长一段的cookie,直接导致服务器接收客户端request的header长度增长,流量增长的同 时服务器负担也变重。而且根据 RFC 2109 的定义Cookie也有长度和个数限制,IE允许的最大 Cookie 长度是 4096 字节,允许50个 Cookie 名-值对。如果要突破50个名-值对的限制,可以在一个名-值使用Cookie字典的方式保存更多的Cookie变量。

http://blog.seateng.cn/archives/2009/03/ie-javascript-cookie-path-bug.html

这次的静态化功能让我学到了cookie的这个问题。很是高兴啊。

这次静态化功能还涉及到了一个跨域请求的问题。事情是这样的:

我在搜索模块(域名search.emall.xxx.xxx)需要显示当前用户的商品浏览历史。二者个商品浏览历史是在主站的cookie里面存储的。为了方便我们把COOKIE_DOMAIN都设置成了一样的一级域名,使用js的cookie却不能获得设置好的cookie。但是,使用firebug + firecookie却可以清楚的看到cookie是存在的且没有过期。唯一不同的就好似cookie的domain和当前模块的domain一致(cookie是在主站设置好的emall.xxx.xxx,当前search的域名为search.emall.xxx.xxx)。 这很容易就让人想到是cookie domain的问题导致的。问题原因找到了,解决它。使用js不行我就我就使用ajax的方式请求主站,在主站吧cookie取出来,然后再原样的返回。编码,运行,反先,ajax请求还是不能获得(使用get的方式发送请求)。把ajax请求的地址放在地址栏里面,确实有内容返回,但是使用ajax请求的话,还是不能获得cookie的值。很显然,这种情况就是传说中的跨域请求的问题。这问题咱没有解决过,怎么办那?突然想起来了,该模块下用户登录信息就是通过ajax异步取出来的。同时ajax请求为什么用户的登录信息可以拿到我的为什么就拿不到???

找原因。找到请求用户信息的代码,才发现,原来请求的时候和我的ajax还有一点不一样。请求用户信息的方式为:

JS代码如下:

复制代码
复制代码
    //跨域获取数据
jQuery.ajax({
type : "GET",
url : temp_domain_url+"/index.php?",
data : "act=get_user_info&php_session_id="+jQuery.cookie('COOKIE_ID')+"&jsoncallback=?",
dataType : "jsonp",
jsonnp : 'callback',
success:function(data){
      ...
      ...
      ...
    }
  });
复制代码
复制代码

php代码如下:

复制代码
复制代码
function get_user_info()
{
$gbh_goods_info = $_COOKIE['gbh_goods_info'] ? $_COOKIE['gbh_goods_info'] : json_encode(false);
if ($gbh_goods_info && get_magic_quotes_gpc())
{//没有这个的话会出现错误
$gbh_goods_info = stripslashes($gbh_goods_info);
}
$gbh_goods_info = json_decode($gbh_goods_info);
echo $_GET['callback']."({msg: ".json_encode($gbh_goods_info)."});";
exit;
}
复制代码
复制代码

这才弄明白到底是什么原因了。

照着葫芦画瓢终于吧功能实现了。。。。

转自:http://www.cnblogs.com/mitang/p/3884774.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_904937.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解facebook网站框架技术-LAMP

网址: http://www.dbanotes.net/arch/facebook_arch_note.html 作者: Fenng | 设计原则 尽可能的使用开源软件,并且在需要优化的时候进行优化Unix 哲学。包括,模块化原则;整合化原则;清晰化原则等任何组件具备扩展性最小化故障…

《大型网站系统与Java中间件实践》读后感

《大型网站系统与Java中间件实践》读后感 这几天逛ITEYE,首页老提示新书有奖试读活动,我是看了看书单,正好第一本书就是我最近看完的《大型网站系统与Java中间件实践》。不在乎奖不奖(最多送本书,不过我已经买了&#…

大型网站架构系列:分布式消息队列(一)

以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。 本次分享大纲 消息队列概述消息队列应用场景消息中间件示例JMS消息服务(见第二篇:大型…

大型网站架构系列:消息队列(二)

本文是大型网站架构系列:消息队列(二),主要分享JMS消息服务,常用消息中间件(Active MQ,Rabbit MQ,Zero MQ,Kafka)。【第二篇的内容大部分为网络资源的整理和汇…

基于Vue+Element-ui+Laravel的牙齿矫治器定制厂家网站

BlueTooth 蓝牙医疗-后台管理 项目简介 本项目的应用场景是某牙齿矫治器定制厂家的网站,其功能目的是提供牙医与厂家的交互平台,网站涉及三个角色:游客、牙医、专家(网站管理员)。 根据需求,专家和网站管理员的功能具有高度相似…

大型网站架构之分布式消息队列

以下是消息队列以下的大纲,本文主要介绍消息队列概述,消息队列应用场景和消息中间件示例(电商,日志系统)。 本次分享大纲 消息队列概述消息队列应用场景消息中间件示例JMS消息服务常用消息队列参考(推荐&…

个人网站的简易数据分析

大数据时代,不会一点数据分析总觉得会被时代淘汰。但是,数据分析看起来很难的样子,每个人都能学会吗?就笔者个人观点来看,数据分析要做的深,的确不容易,涉及到许多的工具和模型建设。但仅仅只是…

YSLOW测测网站速度

一个网站打开的速度有多快?除了机房带宽,线路,IP级别,等不能或不好改变的因素外,跟网站本身的程序也有很大关系,这里谈谈一个测试工具,YSLOW,测测网站的内部因素以提升用户的访问速度; YSLOW是FIREFOX的一个插件,所以必须先装FIREFOX,下载地址http://www.mozilla.org.cn YSL…

网站接入QQ登录

在网站接入QQ登录时遇到很多麻烦,主要是QQ互联和腾讯开放平台的关系比较乱,不知道要从哪个接入。 最终解决方式:在腾讯开放平台注册个人开发者,验证通过后,在QQ互联平台会有腾讯开放平台的注册信息,然后依次…

基于SSM(Spring+SpringMVC+MyBatic)+JSP的少儿编程教育网站管理系统

项目背景 在国家重视教育影响下,教育部门的密确配合下,对教育进行改革、多样性、质量等等的要求,使教育系统的管理和运营比过去十年前更加理性化。依照这一现实为基础,设计一个快捷而又方便的网上少儿编程教育网站系统是一项十分…

基于nodejs的电影交流网站

末尾获取源码 开发语言:nodejs 框架:Express 数据库:MySQL5.7 数据库工具:Navicat 11 开发软件:Hbuilder / VS code 浏览器:edge / 谷歌 目录 一、项目简介 二、系统功能 三、系统项目截图 3.1前台首页…

基于SpringBoot的留守儿童爱心网站

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SpringBoot 前端:Vue、HTML 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#…

基于SSM的书画拍卖网站

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

项目二网站完善

<div class"container-fluid"><div class"container"><h2 class"common-title text-center">成功案例</h2><div class"row"><div class"col-lg-8 col-lg-offset-2 common-detail text-center&q…

利用json隔离网站布局和页面实际模块的内容载入

在项目中,有个这样的需求:动态维护页面的布局,以及动态载入布局容器中的具体模块。最开始的实现方式是&#xff0c;在服务端一次性获取当前页面的布局结构&#xff0c;当前页面的所有功能模块&#xff0c;同时通过循环检索某一功能模块属于哪个容器并合理放置&#xff0c;最后获…

网站流量日志数据分析系统与技术架构

文章目录 网站流量日志数据分析系统1&#xff0e; 点击流数据模型点击流概念点击流模型生成 2&#xff0e; 如何进行网站流量分析网站流量质量分析&#xff08;流量分析&#xff09;网站内容及导航分析&#xff08;内容分析&#xff09;网站转化以及漏斗分析&#xff08;转化分…

前端开发的一些网站

前端学习需要用到的一些网站 最近从网上收集的一些对前端开发有帮助的网站 我常用的有: 千库网&#xff0c; jQuery之家&#xff0c; 前端在线工具&#xff0c; 字体库&#xff0c; 阿里图标&#xff0c; RBG转16进制&#xff0c; itmeo 1. 素材类网站 http://588ku.com…

为我的博客网站数据库使用Docker实现MySQL主从同步

前言 个人博客使用了阿里云的服务器&#xff0c;此文是笔者实现WordPressDockerMySQL主从同步架构的记录。 环境 Docker version 1.13.1 LNMP&#xff1a; 阿里云centos 7.3nginx version: nginx/1.12.2mysql5.6&#xff08;Docker镜像&#xff09;PHP 5.4.16 WordPress:…

漂亮的HTML网站赞助打赏单页源码

简洁大气的一款打赏页&#xff0c;纯HTML上传即可使用&#xff0c;自己修改相对应图片&#xff0c;尺寸设置好就行 修改首页文字在/index 搭建环境教程 虚拟主机域名 直接上传虚拟主机然后解析域名在绑定&#xff0c; 搭建非常的简单&#xff0c; 下载地址&#xff1a;ht…