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:其它操作
}
在IE中,页面通过FRAME,JS,IMG等引用其他域名页面的时候,P3P协议会阻止引用也的cookie。
举例说明:
在 B.COM中,
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/php/)<iframe width = 300 height = 300 src = ”http://www.a.com/test.php” mce_src = ”http://www.a.com/test.php”
此时,test.php中产生的cookie将会被阻止,而不会记录下来
这种情况下,我们引入P3P header ,情况就改变喽~
P3P header允许跨域访问隐私数据,从而可以跨域set-cookie成功
在 www.a.com/test.php中这样写:header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
cookie就可以跨域了~
这种方法在单点登陆中被别广泛应用~
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/php/)