手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表Tag:php

Cookie常识

在制作 网页的时候,不可避免的会用到Cookie,无论是登录也好,保存状态也好,或多或少,你都会在使用Cookie这个小甜饼。

然而甜饼并不是这么好吃的,吃的过多也会有问题的,如果你的网站COOKIE数量过多,或许你的浏览器就直接打不开这个网页(这点好象是和SERVER端有关,apache接受客户端的COOKIE数量和长度也有限制)

对于用户来说,如果没有做限制的话,那么COOKIE过多会导致后一个新的COOKIE会覆盖掉前面的COOKIE。。

那么,究竟应该有多少COOKIE呢?

以下内容来自DBA Notes网站:

Cookie 是个很有趣的话题。根据 RFC 2109 的描述,每个客户端最多保持 300 个 Cookie,针对每个域名最多 20 个 Cookie (实际上多数浏览器现在都比这个多,比如 Firefox 是 50 个) ,每个 Cookie 最多 4K,注意这里的 4K 根据不同的浏览器可能不是严格的 4096 。别扯远了,对于 Cookie 最重要的就是,尽量控制 Cookie 的大小,不要塞入一些无用的信息。

所以,不要把你想知道的用户行为都采用COOKIE来保存,否则造成的后果恐怕是非常大。在一些大型网站,目前对于用户的行为已经开始逐步采用数据库来控制,这样可以记录用户的一些操作,对于用户的行为分析也能够达到的一定的效果,缺点是加大了数据库的压力。而且对于未登录网站的用户来说,他的行为将变得毫无意义

想象:将用户的一些普通行为采用Cookie保存,重要信息记录数据库。比如用户浏览过的网页记入cookie,而用户停留时间最长的网页则考虑记入数据库(当然,对于那种开着网页不关的人就无法对付了,但仍然可以通过客户端的document.scroll的高度来进行判断,再通过ajax提交 )意义不是特别大。对于一些象购物车之类的,确实可以考虑存入数据库,否则一旦网页误关闭了对于用户的体验可能并不是很好(给用户一个可选项:cookie或者数据库,但好象有点傻)。。。。。。

随便谈谈吧。。

Tags: php, web, cookie, rfc2109

haohappy的努力

国内的PHP程序员对于haohappy应该算是比较熟悉的一位吧,很早的PHP手册翻译,他就参与了其中,《Programming PHP》第二版,就是他进行翻译的,而且他在phpchina上开了专版,说是提交了多少个勘误的,可以送一本修订版或者另一本PHP的杂志,然而我在提交了十多个BUG后,因为工作关系被我放弃了。

不过那段时间,我确实是对照了原版和他的翻译版差不多看了一遍。虽然有一些翻译在语义上和我有些区别,但这毕竟是没有办法的事情。每个人对于一件事物的理解都会有偏差,无所谓谁对谁错(当然也可能确实是我理解错了)。

对于PHP的贡献,他不止这一点,他在看到目前PHP手册没人翻译后,终于忍不住了,开始下决心对手册再次进行翻译:http://blog.csdn.net/Haohappy2004/archive/2008/12/13/3511730.aspx,http://blog.csdn.net/Haohappy2004/archive/2008/12/14/3514421.aspx;

想期待他翻译的朋友要等一段时间了,在这段时间内,大家可以去CU找honestQiao的新版本进行下载:http://bbs.chinaunix.net/thread-999247-1-1.html,或者找本站的置顶贴进行下载。

等新版的翻译好了,我也会同步到本地。一来可以自用,二来可以为使用网通的朋友们下载进行提速。哈哈

Tags: php, haohappy, 手册, manual, 翻译

Minify的简单介绍

上篇从老王的博客里抓了点东西,在文末我提到了minify,然后我又从nio的博客中找到minify的资料,同样贴给大家,具体的英文更新,还是可以从:http://code.google.com/p/minify/来进行获取,下面的是nio的翻译。。。

原文网址:http://nio.infor96.com/archives/862

内容如下:

Minify 是使用 PHP5 开发的用于合并压缩 js/css 文件的应用程序。合并压缩之后的结果可通过 HTTP gzip/deflate 及一些相关头,优化客户端缓存。可参考 Yahoo 的 Rules for High Performance Web Sites

Minify 的安装使用很简单,下载最新版本,解压,将 min 目录复制到发布目录下,然后访问 http://example.com/min/,在显示的界面中加入你想合并压缩的 js/css 路径,点击 'Update' 之后会为你生成一个 url,如:

http://localhost/min/b=googletesting/js&f=mootools.js,iAction.js,iAjax.js,global.js

接下来你就可以将这个 url 放到你的页面中了。这样可以使请求数减少,传输的字节数也小了很多。而且 Minify 支持服务器端 cache,即将合并压缩的结果 cache 到服务器端文件中,下次访问就不需要再重新做合并压缩的操作了。如果需要组合的文件很多,url 就会变得很长,Minify 支持 group,可以将这些文件分组,这样 url 中只需指定 g=group名字 就可以了。

总之,Minify 很实用 :)


以下是最新更新的内容:

Version 2.1.0 (2008-09-18)

  • "min" default application for quick deployment
  • Minify URI Builder app & bookmarklet for quickly creating minify URIs
  • Relative URIs in CSS file are fixed automatically by default
  • "debug" mode for revealing original line #s in combined files
  • Better IIS support
  • Improved minifier classes:
    • JS: preserves IE conditional comments
    • CSS: smaller output, preserves more hacks and valid CSS syntax, shorter line lengths, other bug fixes
    • HTML: smaller output, shorter line lengths, other bug fixes
  • Default Cache-Control: max-age of 30 minutes
  • Conditional GETs supported even when max-age sent
  • Experimental memcache cache class (default is files)
  • Minify_Cache_File has flock()s (by default)
  • Workaround for Windows mtime reporting bug

 

 

Tags: minify, php, javascript

利用PHP裁剪图片

其实,用PHP裁剪图片的原理是很简单的,无非就是用javascript画出一个方块,计算一下四个角的顶点,然后从原图中按照这四个点的坐标把当中的图切出来。

网上有现成的例子:http://www.coderhome.net/zifa/?p=351,不过里面的JS库用的是mootools的,如果要看,请直接到该网上去看,以后,等有空了,用jQuery的模拟一下,呵呵。
jQuery的插件还是很好开发的

Tags: php, 裁剪, mootools, javascript

PHP的XSS攻击过滤函数

XSS攻击在最近很是流行,往往在某段代码里一不小心就会被人放上XSS攻击的代码,看到国外有人写上了函数,咱也偷偷懒,悄悄的贴上来。。。
原文如下:
The goal of this function is to be a generic function that can be used to parse almost any input and render it XSS safe. For more information on actual XSS attacks, check out http://ha.ckers.org/xss.html. Another excellent site is the XSS Database which details each attack and how it works.

PHP代码
  1. <?php  
  2. function RemoveXSS($val) {  
  3.    // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed  
  4.    // this prevents some character re-spacing such as <java\0script>  
  5.    // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs  
  6.    $val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/'''$val);  
  7.      
  8.    // straight replacements, the user should never need these since they're normal characters  
  9.    // this prevents like <IMG SRC=@avascript:alert('XSS')>  
  10.    $search = 'abcdefghijklmnopqrstuvwxyz'; 
  11.    $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';  
  12.    $search .= '1234567890!@#$%^&*()'; 
  13.    $search .= '~`";:?+/={}[]-_|\'\\'; 
  14.    for ($i = 0; $i < strlen($search); $i++) { 
  15.       // ;? matches the ;, which is optional 
  16.       // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars 
  17.     
  18.       // @ @ search for the hex values 
  19.       $val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ; 
  20.       // @ @ 0{0,7} matches '0' zero to seven times  
  21.       $val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ; 
  22.    } 
  23.     
  24.    // now the only remaining whitespace attacks are \t, \n, and \r 
  25.    $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base'); 
  26.    $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload'); 
  27.    $ra = array_merge($ra1, $ra2); 
  28.     
  29.    $found = true; // keep replacing as long as the previous round replaced something 
  30.    while ($found == true) { 
  31.       $val_before = $val; 
  32.       for ($i = 0; $i < sizeof($ra); $i++) { 
  33.          $pattern = '/'; 
  34.          for ($j = 0; $j < strlen($ra[$i]); $j++) { 
  35.             if ($j > 0) { 
  36.                $pattern .= '(';  
  37.                $pattern .= '(&#[xX]0{0,8}([9ab]);)'; 
  38.                $pattern .= '|';  
  39.                $pattern .= '|(&#0{0,8}([9|10|13]);)'; 
  40.                $pattern .= ')*'; 
  41.             } 
  42.             $pattern .= $ra[$i][$j]; 
  43.          } 
  44.          $pattern .= '/i';  
  45.          $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag  
  46.          $val = preg_replace($pattern$replacement$val); // filter out the hex tags  
  47.          if ($val_before == $val) {  
  48.             // no replacements were made, so exit the loop  
  49.             $found = false;  
  50.          }  
  51.       }  
  52.    }  
  53.    return $val;  
  54. }   

经过这样的过滤后,应该被攻击的机会会少上很多吧?试试看呢?

Tags: php, xss, filter, function