谷歌浏览器 iframe session 谷歌浏览器 iframe 闪烁

这篇文章给大家聊聊关于谷歌浏览器 iframe session,以及谷歌浏览器 iframe 闪烁对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

谷歌浏览器 iframe session 谷歌浏览器 iframe 闪烁

本文目录

  1. iframe丢失session问题
  2. 如何解决iframe session 失效问题
  3. 怎么把session统一到一个域
  4. IE下iframe跨域登录导致session丢失问题分析及解决方法

一、iframe丢失session问题

其实是这样的,iframe是相当于又打开了一个新的页面,如果你要给这个页面传参数,用get方式写在路径的后面,如果你想把request请求也传进去,哪么只能你请求一个action,让action转向到这个页面,他才能获取request请求,你才能得到里面的数据,不然是得不到request请求中的数据的,就出现你的session得不到的情况,要先搞明白他是怎么工作的,ok

二、如何解决iframe session 失效问题

1、iframe跨域与session失效问题的解决办法

2、这篇文章主要介绍了iframe跨域与session失效问题的解决办法,有需要的朋友可以参考一下

3、也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion/cookie,

4、会被存储在访客的计算机上。第三方session/cookie指的是当前访问的网站中会加载(嵌入)另外第三方的网站代码,例如促销广告,那么第三方网

5、站也会在访客的计算机上添加session/cookie,这种就是第三方session/cookie。

6、在开发讯息在线产品()测试各种浏览器的兼容性时,发现IE浏览器(v7\8)都无法登录(总是提示验证码不匹配错误),而其它浏览器无此问题(firefox、百度等)。因此可以断定这和浏览器脱不了干系。

7、细查发现,在使用IE浏览器(v7\8)访问时,服务器端日志中显示sessionId一直在变化,每次请求都会产生一个全新的sessionId.

8、显然这是导致无法登录的直接唯一原因,如果解决这个问题则可正常登录。

9、为什么在IE浏览器(v7\8)上会出现这种情况呢,百度了解后得知:

10、出于隐私安全的考虑,IE会丢失Iframe中的Cookie,IE6/IE7支持的P3P(Platform for Privacy Preferences

11、Project(P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox、Chrome不存在此问题。

12、其实就是基于Cookie的。客户端在第一次与服务器建立会话时,会分配给客户端一个随机的sessionId,并存于客户端cookie中,然后在之后的请求中,会带上这个Cookie,如果在客户端找不到这样的Cookie,那么服务器就会重新分配一个。

13、而我的应用结构恰恰如此,即内置一个iframe嵌入远程应用来实现的。

14、要解决这个问题就是要在请求时添加“P3P”协议。那么如何实现呢?

15、response.setHeader("P3P","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi

三、怎么把session统一到一个域

1、要实现多域名共享session,首先就得了解SESSION的运行机制。基本概念我就不说了。

2、用户A访问站点Y,如果站点Y执行了session_start();(以下假定session_start()总是存在)那么会产生一个 session_id,这个session id一般会以COOKIE的形式保存到用户A(我们可以通过在php.ini里设置session.use_only_cookies为1,强制SESSION ID必须以COOKIE传递。)。这时候SESSION ID表现为$_COOKIE['PHPSESSID'];(PHPSESSID可用session_name()函数来修改)

3、用户A接着访问,这个session id($_COOKIE['PHPSESSID'])就会在A每次访问Y的时候传送到站点Y。

4、在站点Y上,会有这么一个目录,是用来保存SESSION的实际数据的。站点Y接收到session id,然后通过session id,来获得与SESSION数据的关联,并返回SESSION数据。

5、可能聪明的你已经想到了,既然服务器端和客户端之间的SESSION是通过一个SESSION ID来联系,并且SESSION数据是以普通文件的形式保存在一个特定的文件夹里。

6、那么我们要实现不同域名,只需要满足以下两个条件:

7、1)不同域名的SESSION数据目录统一到一起,或者同步更新。2)对同一个客户,使用统一的一个SESSION ID

8、如果是同一台服务器,就不需要进行任何设置了。

9、如果是集群/分布式的,那么我想也不需要我来说了。。能做分布式应用的,在目录共享方面的经验应该比我丰富。我也没有进行过多服务器的测试,主客观条件的原因都有。

10、我在这里主要是想说一下第二个条件——使不同的域名,拥有统一的SESSION ID。

11、首先必须在不同域名之间传递这个SESSION ID,且由于 cookie必须是针对域名的,所以传递动作是由客户端来完成。如果传递过程不是由客户端来完成,那么接受传递的域名就不知道针对的是哪个客户。

12、其次就是修改接受传递的域名下的SESSION ID。

13、HTML里,我们可以使用很多种方法。例如

14、<iframe src=”"></iframe>

15、<script type=”text/javascript” src=”"></script>

16、在wml里,由于wml script的特点,我们无法使用script这样的形式来调用,而wml里也没iframe..但是我们还是可以通过img来实现传递的。

17、既然SESSION ID一般情况下是通过COOKIE来传递,那么我们只需要通过传递$_COOKIE['PHPSESSID'];即可。但是如果PHPSESSID被session_name改变了,我们又得修改setcookie中的PHPSESSID..这样就会变得很麻烦。。所以我们可以选择一个session特有的函数session_id来修改$_COOKIE['PHPSESSID'];

18、如果session.use_only_cookies为0(PHP默认),那么session id有可能会以url或其他形式传递session_id()和session_name必须在session_start()前使用

19、以下是我写的一个简单的实现多域名的类。如果上面的看不太明白,可以看看我的这个多域名类。这个类是在HTML下以iframe形式实现的。

20、<?phpclass mdSession{function mdSession(){}function set($urls){if(!is_array($urls)){$urls=array($urls);}foreach($urls as$value){echo'<span style="position:absolute;visibility:hidden"><iframe src="'.$value.'?'.session_id().'"></iframe></span>';}return true;}function get(){session_id($_SERVER['QUERY_STRING']);session_start();return true;}function _set($urls){$obj=new mdSession();return$obj->set($urls);}function _get(){$obj=new mdSession();return$obj->get();}}?>?index.php:<?php? include"mdSession.php";?session_start();$_SESSION['php']="yogurt8";mdSession::_set(';);var_dump($_SESSION);?>?ses_get.php<?php?include"mdSession.php";mdSession::_get();?>?b.php:?session_start();var_dump($_SESSION);?先访问 然后在 看效果?在firefox与谷歌浏览器是没问题,但在 Ie下还是不行

四、IE下iframe跨域登录导致session丢失问题分析及解决方法

1、网上有这类文章,一般表现为a站点有iframe,iframe的src指向b站,b站登录后保存该域cookie,下次再访问的时候就可以带上这个cookie,但IE下失效。

2、而我的情况有些类似,但不尽然;

3、我的是a站有iframe,但src是指向自己(如,login.aspx页)。然后login有个form,action到B站点,然而去B站点就只是拿一些资料,加密后给回a站点进行登录(cookie写入)。

4、但发现此时的cookie已经写不进了。

5、这里应该就是session已经变了,说应该是因为我没确认过。

6、解决方法也很简单,和网上的一样。

7、IE6/IE7支持的P3P(Platform for Privacy Preferences Project(P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存在此问题了。Mircosoft对此的具体描述可以参见 Privacy in Internet Explorer 6

8、解决办法是在要嵌入的内容中(iframe指向的站点)输出P3P的主机头声明:

9、if(Request.Browser.Browser.ToUpper().Contains("IE"))

10、   Response.Headers.Add("P3P","CP=CAO PSA OUR");

关于谷歌浏览器 iframe session,谷歌浏览器 iframe 闪烁的介绍到此结束,希望对大家有所帮助。

声明:信息资讯网所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,版权归原作者东方体育日报所有。若您的权利被侵害,请联系 删除。

本文链接:http://www.gdxhedu.com/news/154984.html