Submitted by gouki on 2010, July 21, 9:43 PM
P3P,不算是新名词,但还是有些人不清楚。事实上我也不清楚。。。在百度上看到有这玩意就备份下来。说真的,我只是知道用,但不知道为什么用。额。。很明显,因为在ucenter同步的时候,在discuz的ui/api里有写过。
看内容吧。。。。
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网站中写入www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
PHP代码
- <?php
- header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
- ?>
这样就能接受第三方的Cookie啦。
lighttpd的服务器
XML/HTML代码
- server.modules = ("mod_setenv")
- setenv.add-response-header = ( "P3P" => "CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'")
apache的服务器
XML/HTML代码
- <VirtualHost>
- Header set P3P 'CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'
- </VirtualHost>
IIS的服务器www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
增加一个网站http头来解决问题;www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
管理工具——〉选择一个网站——〉属性——〉 http头,增加一个http头www.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
然后输入头名:P3Pwww.kobsky.cn 小眼世界ýñ ëÕRÏz-Z
输入头内容:CP=CAO PSA OUR
jsp页面:
XML/HTML代码
- <%
- response.setHeader("P3P","CP=CAO PSA OUR");
- %>
java代码最简单的办法,增加一个filte:
Java代码
- public class TransNameFilter extends HttpServlet implements Filter {
- private static org.apache.commons.logging.Log logWriter =
- LogFactory.getLog(TransNameFilter.class.getName());
-
-
-
-
- public TransNameFilter() {
- super();
-
- }
-
-
-
- public void init(FilterConfig arg0) throws ServletException {
-
- }
-
-
-
-
- public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
- throws IOException, ServletException {
-
- HttpServletRequest hreq = (HttpServletRequest) request;
- String transName = hreq.getParameter("transName");
- if (Util.isNullOrEmpty(transName)) {
- logWriter.fatal(" there is no transName for this request");
- } else {
-
- logWriter.info(" transName is " + transName);
- }
-
- HttpServletResponse res = (HttpServletResponse) response;
-
- res.setHeader("P3P","CP=CAO PSA OUR");
- if (chain != null)
- chain.doFilter(request, response);
-
- }
-
-
-
-
- public void destroy() {
-
- }
-
- }
Tags: session, cookie, p3p
PHP | 评论:0
| 阅读:29217
Submitted by gouki on 2010, July 20, 5:33 PM
1、老王的乱炖中写了一个例子。
写代码要细心【http://hi.baidu.com/thinkinginlamp/blog/item/5e8062d9b33ccc2110df9b2a.html】
看一段PHP代码,设想一下它的输出结果,可以用来做面试题:
<?php if ($a = 100 && $b = 200) { var_dump($a, $b); } ?>
我眼睛一闭就随便想了一下$a=100,$b=200。然后看标题是写代码要细心。再仔细看看。才发现。。。额,我错了。
2、yaml
yaml这东西有据可证以来,好象在国内,应该算是QeePHP最早拿来做应用(我是指开源项目中),确实这东西挺方便【现在新浪sae的配置文件就是用yaml的】
初学者可以看看http://www.lanyg.com/blog/?p=63,Tim在这里写了一些简单的入门。不过我相信,足够你使用了。
yaml主要还是写起来方便。而且不用过多的担心语法(xml还需要闭合。array的话也需要注意PHP语法),yaml反正解析出来,要么不对,要么就正确。至少不会报一些奇怪的错误。
3、HTTP协议。
这篇也是来自于tim的博客:http://www.lanyg.com/blog/?p=33,他也是转载的csdn的文章http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx,原作者是jeffrey,内容挺长。不过如果你想要模拟http POST和GET数据,你真的可以看一下这一篇东西
它介绍了【HTTP协议详解之消息报头】,也教你如何用telnet查看http协议的通讯过程(当然现在我们都是用firebug或者fildder之类的工具),文章最后介绍了一些补充协议,如代理(proxy),通道(tunnel)等。值得一看。
Tags: yaml, operation
PHP | 评论:0
| 阅读:18203
Submitted by gouki on 2010, July 20, 11:10 AM
在typecho开发插件的时候,很有可能会用到关联插件(即,部分信息需要从其他插件里来读取)因此,在插件激活的时候就得先判断是否关联插件已经启用。
最初我的代码是:
PHP代码
- $mailOptions = Typecho_Widget::widget('Widget_Options')->plugin('CommentToMail');
- if(emptyempty($mailOptions)){
- throw new Typecho_Plugin_Exception(_t('对不起,数据库备份插件需启用CommentToMail插件。'));
- }
但是在这样处理的时候,会提示“找不到CommentToMail插件的配置信息”,直接就抛出异常
于是代码改成:
PHP代码
- try{
- $mailOptions = Typecho_Widget::widget('Widget_Options')->plugin('CommentToMail');
- }catch(Exception $e){
- throw new Typecho_Plugin_Exception(_t('对不起,数据库备份插件需启用CommentToMail插件。'));
- }
于是这样的出错提示信息就较为友好了。
由于关联了其他插件,因此在处理的时候,还要再判断这个$mailOption是否存在,因此我把它设为了protected static $mailOptions,然后在要处理的页面会判断这个变量是否为empty。如果是后台处理就抛出异常,前台处理则直接return;不作继续
Tags: typecho, 插件, 技巧
PHP | 评论:0
| 阅读:19093
Submitted by gouki on 2010, July 19, 2:06 PM
提起这个问题,很沉重。在cookie上我遇到很多很多奇怪的问题了(其实只是看起来奇怪而已)
一一列一下吧
1、页面是200状态,就是打不开。一直显示正在打开。但其他页面正常(首页并无其他特别的长耗时的代码)
2、页面显示XXX错误(不记得代码是多少了。。以前在做测试的时候遇到过)
3、cookie明明注册了。但却总是无效。
一一列解吧。
1、cookie数过多了,事实上,我没有设很多的cookie,只是,我在访问的时候,很多其他链接也帮我带上了cookie,导致在我这个域名根下,cookie数量过多。
在Cookie常识 一文中我转载过DBA notes里的几句话:Cookie 是个很有趣的话题。根据 RFC 2109 的描述,每个客户端最多保持 300 个 Cookie,针对每个域名最多 20 个 Cookie (实际上多数浏览器现在都比这个多,比如 Firefox 是 50 个) ,每个 Cookie 最多 4K,注意这里的 4K 根据不同的浏览器可能不是严格的 4096 。别扯远了,对于 Cookie 最重要的就是,尽量控制 Cookie 的大小,不要塞入一些无用的信息。
解决方法:清空cookie或者删除非本站cookie
2、cookie长度超出限制了。当时是在apache的服务器下,我用的是firefox,出错情况是提示cookie超长(错误代码记不清,最后是清空cookie解决 )
这里也有一位朋友有类似情况:Cookie 太大导致页面无应答的问题,这是他的总结:
- 好像在IIS6下特定环境下就会出现这个问题,因为当时整个项目有10多台Web服务器做了F5,但只有2台出现这个问题。针对这个问题,我在 IIS7下也进行了一下测试,发现当Cookie的大小达到30000多字节时,就会出现有应答为200的包,但应答的内容为空,在IE上显示为“ Internet Explorer cannot display the webpage ”,所以具体能使用cookie有多大,IIS6和IIS7下标准不一。
- 建议不要将用户配置等过大的信息写入cookie,搞不清楚什么时候IIS就出错了
3、检查一下服务器时间与本地时间是否一致。对于PHP5,有的人总是忽略了时差。检查一下吧。
最后:
1、对多窗口浏览器,其实很郁闷的,你设置的cookie如果是没有过期时间,即关闭窗口即自动删除时,如果不关闭整个浏览器,而关闭当前tab,那么,是无法删除的
2、对于swfupload,IE和FF下面会有不同的情况,传说中flash读的cookie是IE生成的,因此很多时间如果swfupload涉及到了用户登录情况时,总会不正常(后台在上传),记得把param中加个session_id的参数,POST过去。
BTW:这个,我真的很郁闷。有时候我的网站首页会无法打开,为什么呢?因为sablog(或者是我做的hacker)中生成了两个PHPSESSION的cookie,一个所属neatstudio.com,而另一个是.neatstudio.com,结果就导致了页面无法打开(看来,以后还是需要打开neatstudio.com后自动跳转到www.neatstudio.com才比较好,这样就不会出现类似的问题了。懒得改代码了。等 Session消失后就OK了。是不是太不注意用户体验了?)
Tags: cookie
PHP | 评论:0
| 阅读:19766
Submitted by gouki on 2010, July 18, 9:10 PM
一些笔记
1、json_encode与json_decode的。开花石头在村里说,如果json_encode是字符串,那么在解码的时候还是字符串而不是数组,这点与手册上写的不太一样(是指json_decode的第二个参数是true的情况)
具体我没有测试,我想石头既然能够发出来那么一定是有这种情况发生,因此算是做个笔记
2、jquery。在使用$('.xxx').hover时,如何知道当前hover对象在整个$('.xxx')对象中的索引值。事实上,我早就知道有$('li').index()之类的用法,但真的一次都没有成功过。简单的例子:
JavaScript代码
- $('#test li').hover(function(){
- alert( $('#test li').index(this) );
- },function(){
-
- });
差不多就是这样。了解到索引值是多少后,就可以针对它们做很多事。$("xxx:eq("+index+")").text()等操作都可以操作了。
3、在InfoQ上看到有为PHP用户写的AS简单教程(InfoQ上的PDF下载时为显示404,请使用此链接:http://www.riameeting.com/magazine/pdf/RIAMeetingWeeklyReportNum24.pdf),这个版本是在线的,http://blog.csdn.net/lihe111/archive/2010/01/14/5189572.aspx
4、还是InfoQ,领域驱动设计这本书的简化版,原书我有,只是看infoQ上介绍说,这几章是精选出来的。因此想简单了解的话,确实不错:http://www.infoq.com/resource/minibooks/domain-driven-design-quickly/zh/pdf/dddquickly-chinese-version.pdf
5、对于WEB开发人员来说,dreamweaver和fireworks等是必备工具,如果不是专业的前端人员,d8和f8就足够了。而且很小,只有100M都不到。因为这些不是正版所以我不提供下载地址。
Tags: json, jquery
PHP | 评论:0
| 阅读:21632