accept-charset与Header P3P

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


FORM有一个accept-charset属性

  1. <form method="post" action="..." accept-charset="utf-8">  
  2. ...  
  3. </form>   
<form method="post" action="..." accept-charset="utf-8">
...
</form> 

<script type="text/javascript"> dp.SyntaxHighlighter.ClipboardSwf = 'SyntaxHighlighter/Scripts/clipboard.swf'; dp.SyntaxHighlighter.HighlightAll('b544d0bc105e4826a1e33903653b9784'); </script>
测试成功,但在IE下不成功,需要一个HACK来解决:
在form的onsubmit事件触发时动态改变document的编码,即:
οnsubmit="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即可。
如:

  1. Response.AddHeader("P3P", "CP=CAO PSA OUR");  
  2. if (Session[SESSIONKEY] == null)  
  3. {  
  4.    //TODO:其它操作  
  5. }  
Response.AddHeader("P3P", "CP=CAO PSA OUR");
if (Session[SESSIONKEY] == null)
{
   //TODO:其它操作
}

<script type="text/javascript"> dp.SyntaxHighlighter.ClipboardSwf = 'SyntaxHighlighter/Scripts/clipboard.swf'; dp.SyntaxHighlighter.HighlightAll('935e59c661b643d1bf2838552cba538b'); </script>
Discuz中的同步登录也这样实现的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值