Asp.net cookie跨域解决方法,一下午烦死了,终于找到解决方法了 地址:http://blog.csdn.net/wonder4/archive/2008/02/27/2125804.aspx 谢谢这位大牛,收下了 ? ?目前在整合几个应用时,遇到了iframe无法获取cookie(session)的问题,经过google,终于把这个问题解决了,现在记录一下。 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: IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存 在此问题了。 在frameset里面,也就是里面的frame是来自第三方站点(不同IP或不同域名),那么默认情况下IE会自动禁用这些站点的cookie, 也就是在请求某url时在HTTP header里不发送它们的cookie,包括session的cookie。注意,这些站点在response里面设置的cookie还是会被发送到浏 览器的。 在用户浏览a.php时 A.com写入的为第一方Cookie,其嵌入的iframe指向 b.php.这时B.com写入的就为第三方Cookie了,所以它是被IE当在了大门外。 所以,每次当用户提交的cookie提交时,就挂掉了.因为传不到真实的服务器. 解决方案. PHP的程序,可以直接在B网站中写入 ? lighttpd的服务器
? 增加一个网站http头来解决问题; jsp页面:
???我的需求是这样的。
?? 有一个应用是用.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-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----其他--------------------------------------------------------------
管理工具――〉选择一个网站――〉属性――〉 http头,增加一个http头
然后输入头名:P3P
输入头内容:CP=CAO PSA OUR
详细解决方案
用P3P header解决iframe跨域访问cookie(转) Iframe session失灵
热度:609 发布时间:2012-11-22 00:16:41.0
PHP代码
XML/HTML代码
XML/HTML代码
XML/HTML代码
Java代码
相关解决方案
- hibernate 连接 oracle session 有关问题
- Servlet Session 购物车,该怎么解决
- 为啥session id 是保存在 客户端的 cookie 里的啊
- Servlet Session 购物车解决办法
- ssh多数据库配置 如何get session
- hibernate中Query query=session.createQuery的有关问题
- CAPTCHA 模块中 ajax form 导致CAPTCHA session reuse attack detected异常,解决方法
- iframe 子页刷新父页有关问题 大神请帮忙看看
- session 覆盖的有关问题 求高手
- Could not deserialize session data解决方法
- java EL Cookie 有关问题
- response.write(session.getAttribute("BranchName")提示异常
- JSP上if(trim(session.getAttribute("grade"))== "0") 多谢!
- jsp session 过期提示有关问题
- cookie 在liunx上获取不到
- session.invalidate()无效解决办法
- jsp cookie 封存密码 用浏览器清除cookie 后再刷新发先cookie不空
- null id in com.bsw.gms.hibernate.pojo.Score entry (don't flush the Session after an exception occurs,该怎么解决
- struts2关于request,session,application传值与显示的有关问题
- java ssh session NullPointerException,该怎么处理
- Iframe 的使用有关问题
- spring2.0+hibernate3.2中,oracle中产生大量的inactive session,怎么解决
- jsp页面放在html《iframe》中中文没法正常显示 单独是可以显示正常的O(∩_∩)O~该怎么解决
- session 登录有关问题
- Cannot create a session after the response has been committed,该怎么解决
- org.hibernate.HibernateException: No Session found for current thread解决办法
- Cannot create a session after the response has been committed解决办法
- Struts2 的 Action 类里如何创建 session request response out 对象
- eclipse+jboss开发一个十分简单的远程无状态 Session Bean 时遇到的有关问题
- spring aop关于获取 session 有关问题