IE里Iframe的Cookie问题

引用地址:http://www.cnblogs.com/cuihongyu3503319/archive/2009/05/12/1455063.html

当利用IFRAME时,记得要在相应的动态页的页头添加一下P3P的信息,否则IE会自觉的把IFRAME框里的COOKIE给阻止掉,产生问题.本身不保存自然就取不到了.这个其实是FRAMESET和COOKIE的问题,用FRAME或者IFRAME都会遇到.

只需要设置 P3P HTTP Header,在隐含 iframe 里面跨域设置 cookie 就可以成功。他们所用的内容是:

P3P: CP=’CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR’

ASP直接在头部加了头部申明,测试有效。
<%Response.AddHeader “P3P”, “CP=CAO PSA OUR”%>

php的话,应该是如下写法:
header(‘P3P: CP=CAO PSA OUR’);   //IE8
header(‘P3P:CP=”IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT”‘);  //IE7

ASP.NET的话
通过在代码上加Response.AddHeader(“P3P”, “CP=CAO PSA OUR”)或者在Window服务中将ASP.NET State Service 启动。

JSP:
response.setHeader(“P3P”,”CP=CAO PSA OUR”)

让JavaScript和PHP通用值为中文的cookie

引用地址:http://vseb.blog.sohu.com/67136922.html

这是一个哪里都能找到的操作cookie的JavaScript函数:


很遗憾,如果让PHP设定cookie的值为中文,然后让这个JavaScript读取,就会出现乱码:



反之,如果让JavaScript设定了一个中文cookie值,由PHP进行读取,也会出现乱码:



观察上面的乱码,你会发现% u4E2D% u6587刚好是“中文”两个汉字的unicode编码,第一个想法是直接解码,但是PHP里面似乎没有可以把unicode编码转换为汉字的便捷方法。(WordPress倒是不错,不加空格倒是给解码出来了!)

在《JavaScript: The Definitive Guide, 4th Edition》中写到:

In client-side JavaScript, a common use of escape( ) is to encode cookie values, which have restrictions on the punctuation characters they may contain.
在客户端脚本程序中,escape( )函数可以被用作对具有不规范标点的cookie进行编码。(就像我们函数中所用到的一样)

Although the escape( ) function was standardized in the first version of ECMAScript, it has been deprecated and removed from the standard by ECMAScript v3. Implementations of ECMAScript are likely to implement this function, but they are not required to. In JavaScript 1.5 and JScript 5.5 and later, you should use encodeURI( ) and encodeURIComponent( ) instead of escape( ).
虽然escape( ) 已经在ECMAScript中被标准化,但是在ECMAScript v3中,escape( ) 被剔出,如果需要在JavaScript 1.5 和JScript 5.5以后的版本中使用这个函数,建议使用encodeURI( )和encodeURIComponent( )。

按照手册的建议,我修改了JavaScript函数中的escape()和unescape()为encodeURI()和decodeURI(),结果异常的顺利,下面给出修改后的代码和调试程序:







js获取&设置cookie函数

设置cookie:

function setcookie(cookieName, cookieValue, seconds, path, domain, secure) {
	var expires = new Date();
	expires.setTime(expires.getTime() + seconds);
	document.cookie = escape(cookieName) + '=' + escape(cookieValue)
		+ (expires ? '; expires=' + expires.toGMTString() : '')
		+ (path ? '; path=' + path : '/')
		+ (domain ? '; domain=' + domain : '')
		+ (secure ? '; secure' : '');
}

读取cookie:

function getcookie(name) {
	var cookie_start = document.cookie.indexOf(name);
	var cookie_end = document.cookie.indexOf(";", cookie_start);
	return cookie_start == -1 ? '' : unescape(document.cookie.substring(cookie_start + name.length + 1, (cookie_end > cookie_start ? cookie_end : document.cookie.length)));
}

例: