- 浏览: 54755 次
- 性别:
- 来自: 厦门
最新评论
1、IE浏览器iframe跨域丢失Session问题
在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集成,应用到多域的情况下,而Iframe是不能保存Session的因此,网上可以找到很多相关的文章,如果网站可以采用设置Web.Config中的配置: mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="40"
/>
把cookieless="false" 改成"true"就可以了但也同样有个小问题,就是如果页面中采用Javascript的window.location.href=''这样的方式来重定向的话,系统会认为这是另一个新的请求,产生一个新的SessionId,导致原Session同样的丢失所以对于重定向,还是使用 Response.Redirect()为好
除了Ifrmae有丢Session问题外,frameset也有同样的问题Frameset的问题更不确定,是有时会丢,有时不会丢,这更认人头痛,在网上找到了一个方法,在页面page_onload里添加一语句:
Response.AddHeader("P3P","CP=CAO PSA OUR");
FrameSet中的Session丢失问题就解决了至于里面具体的原因 也没时间去搞懂了
最简单的方法就是在iis里设置
解决办法
response.addHeader("P3P","CP=CAO PSA OUR")。
不过难道我们需要在每个页面都加这个么?
不需要的
如果有权配置IIS服务器
打开IIS
管理工具——〉选择一个网站——〉属性——〉http头,增加一个http头
然后输入头名:P3P
输入头内容:CP=CAO PSA OUR
如果没有权限配置IIS服务器,但是你用的是asp.net的话
可以用httpmodual来实现在全部页面或者部分页面头部插入所需要的标志
本站点的某个目录就是这样实现的
2、用P3P header解决iframe跨域访问cookie
本文来源:http://blog.csdn.net/wonder4/archive/2008/02/27/2125804.aspx
目前在整合几个应用时,遇到了iframe无法获取cookie(session)的问题,经过google,终于把这个问题解决了,现在记录一下。
我的需求是这样的。
有一个应用是用.net开发的,主要是控制用户登录,用户访问权限的,部署在上海机房。现在就叫A应用吧
还有一个应用是用java开发,主要是具体业务的操作。部署在北京机房,这里叫B应用吧
由于已经有一个用户管理和权限的应用程序,所以java 开发的这个B应用就没有开发用户权限的功能,想直接使用.net的A程序。
用户访问的流程是这样的:
1.用户先在A处登录,A设自己的cookie,在A的菜单里有去B应用的链接
2.当用户点去B应用的链接时,A在链接上自动加上这个用户的token,传给B系统
3.当B系统接收到请求后,把这个用户的token信息设成自己系统的cookie,(B系统里有表单post操作,如果不设 cookie,session,那么每个请求不管GET还是POST都要明确带着该用户的token信息,对于系统的改造量比较大,另外以后换权限验证方法改动也比较大。)
4.用户在B系统里的每次操作都没有明码带用户的token,所以每次都要去cookie得到token信息,然后发送一个http请求去A,让A系统验证这个用户是否有权限访问。
5.如果A系统的接口返回可以访问的状态报告,那么B继续执行;如果A系统指示没有权限访问,那么B系统提示访问受控警告信息。
一切开发都完成,到整合上线时,发现这个流程走不通,百思不得其解,想了半天也不知道 怎么回事,google了半天,才发现原来是ie在捣鬼,IE不允许跨域访问cookie(好象firefox没问题,ie自6.0以后改用w3c组织的 P3P协议了),再看看我的应用,在第二步设的cookie,在第三步以后所有B应用的访问请求,ie都把B应用的cookie blocked掉了(因为用户的访问是从A应用发起,从A应用访问B应用的东东,算跨域访问,IE认为有安全问题)。。。。(IE状态栏有一个红眼睛的 button,点开可以看到哪些cookie给blocked掉了)
知道原因就好办了,再google知道可以用P3P header可以解决问题!
下面是java的解决办法之一,也是我的解决办法,不过个方法不太好:
直接往响应里加一个P3P的header
response().addHeader("P3P", "CP=\"IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA\"");
其中CP=“XXX XXXX”这些是有具体含义的:
CP就是compact policies的意思,
另外header的值也可以是policyref="http://myhost/P3P/PolicyReferences.xml",就是指定一个策略文件。
具体请看这里.
下面是摘抄的一段Compact Policies的具体取值范围和设值含义。
Compact Policies
Compact policies are essentially summaries of P3P policies. They can be used by user agents to quickly get approximate information about P3P policies, therefore improving performance.
For an in-depth explanation of compact policies, we refer to the P3P1.0[4] specification. Here, we limit to stating the syntax:
compact-policy-field = `CP="` compact-policy `"`
compact-policy = compact-token *(" " compact-token)
compact-token = compact-access |
compact-disputes |
compact-remedies |
compact-non-identifiable |
compact-purpose |
compact-recipient |
compact-retention |
compact-categories |
compact-test
compact-access = "NOI" | "ALL" | "CAO" | "IDC" | "OTI" | "NON"
compact-disputes = "DSP"
compact-remedies = "COR" | "MON" | "LAW"
compact-non-identifiable = "NID"
compact-purpose = "CUR" | "ADM" [creq] | "DEV" [creq] | "TAI" [creq] |
"PSA" [creq] | "PSD" [creq] | "IVA" [creq] | "IVD" [creq] |
"CON" [creq] | "HIS" [creq] | "TEL" [creq] | "OTP" [creq]
creq = "a" | "i" | "o"
compact-recipient = "OUR" | "DEL" [creq] | "SAM" [creq] | "UNR" [creq] |
"PUB" [creq] | "OTR" [creq]
compact-retention = "NOR" | "STP" | "LEG" | "BUS" | "IND"
compact-category = "PHY" | "ONL" | "UNI" | "PUR" | "FIN" | "COM" |
"NAV" | "INT" | "DEM" | "CNT" | "STA" | "POL" |
"HEA" | "PRE" | "LOC" | "GOV" | "OTC"
compact-test = "TST"
另外这里还有一个P3P的验证工具:http://www.w3.org/P3P/validator.html,可以验证一下自己设置的P3P是否正确。
这里还有一个老外写的不错的blog,也可以参考一下。http://www.sitepoint.com/article/p3p-cookies-ie6/2
发表评论
-
servlet jsp 的生命周期
2012-02-09 15:20 1442servlet的生命周期分为以下几个步骤, 第一,加载并实例化 ... -
反射内部类
2011-11-25 18:30 917package test; public class ... -
Date和Calendar类
2010-06-23 08:58 8021、具体类(和抽象类相对)java.util.Date 2、 ... -
Maven2和ivy比较
2010-06-22 13:14 1370Maven 2和Ivy常被放在一起对比,但实际上两者是不同 ... -
JAVA连接DB2注意事项
2010-05-15 23:21 1173使用Class.forName("COM.ibm. ... -
JAVA的MD5加密
2010-01-19 20:44 937MD5的全称是Message-Digest ... -
Web.xml的解析
2010-01-18 13:32 1025web.xml元素介绍 web.xml首先是肯定要包含它的 ... -
JAVA多线程
2010-01-18 13:23 691java.lang.Thread 和 java.lang.R ... -
Java常用工具类(字符编码,时间等)
2010-01-09 16:20 1390/** * 将UTF编码的字符串转化为GB2312 ... -
JDBC调用存储过程
2010-01-09 16:17 900call 语法格式{call 存储过程名(参数列表)} ... -
java读取配置文件
2010-01-09 16:11 8321、随机id的产生如何实现 引入如下的包: impo ... -
UNICODE与汉字编码互转
2010-01-09 16:08 1601为了避免在浏览器中传输数据的时候出现中文乱码,我们可以将内 ... -
Eclipse中JVM内存设置
2010-01-09 16:06 631eclipse.ini内存设置 -vmarg ... -
Hibernate 中 执行 原生 SQL 语句
2010-01-09 16:04 3162用hibernate的executeQuery来执行SQL ... -
hibernate完成oracle存储过程(stored procedures)
2010-01-09 15:59 1138import java.sql.CallableState ... -
oracle 下hibernate3.2 sequence generator 生成id的问题
2010-01-09 15:57 1271@SequenceGenerator(name=&q ... -
hibernate三重关联
2009-12-25 12:15 1072------------------------------- ... -
拦截系统关闭信号
2009-12-19 21:31 1044在Java窗口程序中按ctrl+c会强行中止Java程序。点击 ...
相关推荐
iframe 跨域访问session问题解决方法
NULL 博文链接:https://thoreau.iteye.com/blog/745100
本篇文章小编将为大家介绍,关于Iframe如何跨域访问Cookie和Session的解决方法,有需要的朋友可以参考一下
何为跨域跨域session/cookie? 也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上。第三方session/cookie指的是当前访问的...
iframe跨域访问示例
【ASP.NET编程知识】iframe跨域与session失效问题的解决办法.docx
iframe 与主框架相互访问例子,包含同域访问,跨域访问例子。
框架完美解决了iframe之间的跨域通讯。底层技术采用window.name转换代理实现
以前在面试的时候经常遇到问关于跨域的事儿,所以自己对跨域有一定的概念性了解,知道什么是跨域以及解决跨域的方法,但是具体实际从来没有操作过,直到最近在公司项目中,遇到了一个需要使iframe跨域进行POST提交的...
NULL 博文链接:https://hqlly.iteye.com/blog/1662337
iframe 跨域 自动适应高度;iframe 跨域 自动适应高度;
iframe跨域嵌套自适应高度 iframe跨域嵌套 丢失session值(针对嵌套asp.net 做的网站)
iframe跨域问题:Uncaught DOMException Blocked a frame with origin解决方法
通过HTTPClient界面在JSP中嵌入iframe子界面跨域时,无法获取跨域界面的属性值的问题
这是关于iframe使用过程中出现的问题整理的解决方法,关于使用iframe不用单独写接口打通数据,直接把数据通过ifarme嵌套方法传递过去,使用简单方便。
该文档介绍了vue和普通web页面中iframe实现跨域的解决方案,解决了主页面中无法调用iframe方法的问题
IFrame中Session丢失的解决办法
1、为ScriptManager添加脚本引用,不从ScriptResource.axd中加载MicrosoftAjax.js脚本,而是直接加载 ~/ScriptLibrary/System.Web.Extensions/1.0.61025.0/MicrosoftAjax.js" /> 2、修改MicrosoftAjax....