accept-charset与Header P3P

in Develop

场景一
A网站全站均为UTF-8编码,B网站全站为GB2312编码。
A网站提供一段JS代码供B网站调用,该代码会动态生成一个FORM表单,以收集提交上来的数据。
B网站此时开始提交数据,但提交上来的中文均为乱码。
现象的产生是由于二个网站编码不一致而导致的,一般情况下使二个网站的编码一致即可。
如果无法统一编码该怎么办?

FORM有一个accept-charset属性

<form method=”post” action=”…” accept-charset=”utf-8″>

</form>

测试成功,但在IE下不成功,需要一个HACK来解决:
在form的onsubmit事件触发时动态改变document的编码,即:
onsubmit=”document.charset=’utf-8′;”

场景二
A网站提供一个页面供其它网站进行Iframe调用,该页面使用了SESSION,并进行了SESSION判断。
现象:
B网站IFRAME了A网站的页面,总显示SESSION过期,但直接在浏览器中打开该页面却又是正常的。
这是由于浏览器的安全性所致,SESSION依赖于COOKIE,A与B是二个完全不同的域,A网站没法去读取B网站下的COOKIE,所以SESSION也就失效了。
解决办法:
A网站的页面在输出头上附加一个P3P属性,值为CP=CAO PSA OUR即可。
如:

Response.AddHeader(“P3P”, “CP=CAO PSA OUR”);
if (Session[SESSIONKEY] == null)
{
//TODO:其它操作
}

Discuz中的同步登录也这样实现的

7 Comments

7 Comments

  1. 这个提示非常有用啊!
    收藏了

  2. 这个太好了,经常有接口编码对不上,然后犯迷糊了!

  3. 我也是这二天做项目时遇到的,就记录下来了。相信有很多朋友都被这二个问题困绕,就当是一个小总结吧。

  4. 很好。收藏

  5. 谢谢,很实用。:)

  6. Thanks for sharing your thought. Wish you good luck for your future endeavors. :up:

  7. 相当受用,感谢分享~呵呵 :up:

Leave a Reply

Using Gravatars in the comments - get your own and be recognized!

XHTML: These are some of the tags you can use: <a href=""> <b> <blockquote> <code> <em> <i> <strike> <strong>