cookie与session跨域登陆代码(ie6,ie7,firefox)

frameset里面,也就是里面的frame是来自第三方站点(不同ip或不同域名),那么默认情况下ie会自动禁用这些站点的cookie,也就是在请求某url时在http header里不发送它们的cookie,包括session的cookie。注意,这些站点在response里面设置的cookie还是会被发送到浏览器的。

但象ie 6.0和ie 7.0有个自己的标准.要支持p3p,ie 6的缺省隐私等级设置为"中"——即"阻止没有合同隐私策略的第三方cookie"。而在用户浏览a.php教程时 a.com写入的为第一方cookie,其嵌入的iframe指向b.php.这时b.com写入的就为第三方cookie了,所以它是被ie当在了大门外。

所以,每次当用户提交的cookie提交时,就挂掉了.因为传不到真实的服务器.

好了,不多讲了,直接讲解决方案.

php的程序

可以直接在b网站中写入
<?php
header('p3p: cp="cura adma deva ps教程ao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"')
?>
这样就能接受第三方的cookie啦。

lighttpd的服务器

server.modules    = ("mod_setenv")

setenv.add-response-header = ( "p3p" => "cp='cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor'")

apache的服务器

<virtualhost>

header set p3p 'cp="cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"'

</virtualhost>

iis的服务器
增加一个网站http头来解决问题;
管理工具——〉选择一个网站——〉属性——〉http头,增加一个http头
然后输入头名:p3p
输入头内容:cp=cao psa our

如果要登陆就如下设置

setcookie('auth_member_string', 0, time()+3600,'/',$cfg['domain']);
 setcookie('auth_member_name',0,time()+3600,'/',$cfg['domain']);
 setcookie('auth_member_realname',0,time()+3600,'/',$cfg['domain']);

登出

setcookie('auth_member_string', 0, time()-1,'/',$cfg['domain']);
 setcookie('auth_member_name',0,time()-1,'/',$cfg['domain']);
 setcookie('auth_member_realname',0,time()-1,'/',$cfg['domain']);

下面来看一个测试实例

我只写一个大概,为了测试的方便,先编辑hosts文件,加入测试域名(c:windowssystem32driversetchosts)

127.0.0.1        www.a.com
127.0.0.1        www.b.com

首先:创建 a_setcookie.php 文件,内容如下:

<?php
//header('p3p: cp="cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"');

setcookie("test", $_get['id'], time()+3600, "/", ".a.com");
?>

然后:创建 a_getcookie.php 文件,内容如下:

<?php
var_dump($_cookie);
?>

最后:创建 b_setcookie.php 文件,内容如下:

<script src="http://www.a.com/a_setcookie.php?id=www.b.com"></script>

----------------------------

三个文件创建完毕后,我们通过浏览器依次访问:

http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php

我们会发现,在访问b.com域的时候,我们并没有在a.com域设置上cookie值。

然后我们修改一下a_setcookie.php文件,去掉注释符号,a_setcookie.php即为:

<?php 
header('p3p: cp="cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"'); 

setcookie("test", $_get['id'], time()+3600, "/", ".a.com"); 
?>

再次通过浏览器依次访问:

http://www.b.com/b_setcookie.php
http://www.a.com/a_getcookie.php

这次,你会发现在访问b.com域的时候,我们设置了a.com域的cookie值。

末了补充一句,似乎只有ie对跨域访问cookie限制比较严格,上述代码在firefox下测试,即使不发送p3p头信息,也能成功

时间: 2024-09-18 01:41:50

cookie与session跨域登陆代码(ie6,ie7,firefox)的相关文章

ThinkPHP框架实现session跨域问题的解决方法_php实例

ThinkPHP的session跨域问题很多开发者都遇到过! 其实不管是ThinkPHP还是php本身,在解决session跨域问题的时候都需要设置session.cookie_domain. 在ThinkPHP里,需要修改配置文件conf/config.php 在第一行加上: ini_set('session.cookie_domain', ".domain.com");//跨域访问Session 经过总结,针对session跨域这一问题的解决方法主要有以下几种: 第一种情况:如果你

针对IE6,IE7,Firefox的CSS

css 我们在用CSS进行构建网页的时候,IE6跟Firefox之间的差异问题可以用 !important 来解决(这种方法尽量少用),但是IE7似乎还是不认识 !important ,而且它跟IE6之间也存在一些差异.浏览器的不一致性总是让人很头疼! 下面分别给出IE6\IE7\Firefox的hack代码: #example { color: #333; }     /* Firefox */* html #example { color: #666; }     /* IE6 */*+ht

session跨域共享

这里所说的跨域,是指跨二级域名,而且这些域名对应的应用都在同一个app上, 比如我有以下3个域名: www.vinceruan.info blog.vinceruan.info bbs.vinceruan.info 我要在这三个域名直接共享cookie或者共享session,如何实现呢?在tomcat下又如何实现呢?  首先我们来了解下cookie,顾名思义,小甜心,少食即可,多吃无益.cookie是通过浏览器保存在客户端的临时数据,一般这些数据对安全的要求不高,虽然可以通过加密存放和SSL方式

jquery异步跨域访问代码

下面是关于jquery异步跨域访问的简单实例,需要的朋友可以参考一下   复制代码 代码如下: /* $.ajax({ url : url, type : 'POST', data : { CorpID : CorpID, Pwd : Pwd, Mobile : Mobile, Content : Content, Cell : '', SendTime : '' }, async : true,//异步 dataType : 'text',//'text','jsonp' success :

CSS hack写法区分不同浏览器IE6 IE7 firefox:

区别IE6与FF:        background:orange;*background:blue; 区别IE6与IE7:        background:green !important;background:blue; 区别IE7与FF:        background:orange; *background:green; 区别FF,IE7,IE6:        background:orange;*background:green !important;*background

php cookie用法与跨域实例教程

/*  语法:   setcookie(name,value,expire,path,domain,secure)  name,cookie名称 必填  value, cookie值,必写    其它的可写,不过来说明一来功能  expire 过期时间如: time()+3600*24  path 路径如:/根目录,也可以指定二级目录如 /111cn.net/  domain 域名,这个就是做了二级域名是要注明了,如果我你让所有二级域都可以访问这个cookie的话就如这样设置:".111cn.n

jquery异步跨域访问代码_jquery

复制代码 代码如下: /*     $.ajax({         url : url,         type : 'POST',         data : {             CorpID : CorpID,             Pwd : Pwd,             Mobile : Mobile,             Content : Content,             Cell : '',             SendTime : ''    

js中访问html中iframe的文档对象的代码[IE6,IE7,IE8,FF]_javascript技巧

<iframe id= "myframe" ></iframe> W3C的标准告诉我们,可以通过Dom对象的contentDocument属性来返回文档对象. 即 复制代码 代码如下: doc= document.getElementById('myframe' ).contentDocument 但对IE浏览器来说,经过测试,IE6,IE7都不支持,IE8开始支持了. 在IE下,需要这样来访问 复制代码 代码如下: document.frames['myfra

多浏览器下IE6 IE7 firefox li 间距问题第1/2页_经验交流

今天小雷提到一个ie5下li产生空白行距的问题,下面来测试一下.  新建一个简单的HTML测试文件,下面来测试ul li标签. 复制代码 代码如下: <ul>   <li><a href="#">菜单一</a></li>   <li><a href="#">菜单一</a></li>   <li><a href="#">