51.la统计系统的cookie导致程序cookie失效
[ 2010-05-03 10:10:00 | 作者: admin ]
niupu缓存策略的使用上,为了省力用了Zend_Cache中的PageCache。而使用PageCache时,对于不同的登录用户,可能有一些细节是不一样,所以选择了“cache_with_cookie”和”make_id_with_cookie”。这样的话,程序会先对cookie数组进行序列化,将其转化为字符串,然后与REQUEST_URI拼接,最后计算md5散列值。计算得到的结果就是这个PageCache的ID。
对于一般的爬虫们发起的请求,自然是不带有Cookie的,也可以容易地使用缓存。但通过Firefox打开网站,在使用帐户登录以前,我也以为是不带有Cookie、可以使用缓存的。但实际情况是一直都不能成功使用缓存,以为是个案,所以没有管。直到前些日子用了memcached,又忍不住开工调试。
最后发现是cookie中的 AJSTAT_ok_times和AJSTAT_ok_pages在捣乱。在我没做任何设置时,这两个值就随着我访问网站出现在cookie列表里。我仔细搜索也没找到关于这两兄弟的细节,比如为啥会自己出现在cookie中。不过我猜测ok_times应该是记录访问这个网站的次数,ok_pages用来记录访问的页数,不知道是不是正确。
找到了问题,就可以有针对性地做出修改了。比较好的办法是写一个新的类继承原有的类,然后重写一下make_id这个函数。不过我就直接改了Zend_Cache的源码。
在/Cache/Frontend/Page.php中,有个叫“_makePartialId”的函数,找到包含case = “Cookie”的一节,其中有一句:
$var = $_COOKIE;
改成
$var = array($_COOKIE['info1'],$_COOKIE['info2']…);
原理就是用一个类似filter 的东西把有效的Cookie信息进行重新打包成一个数组。这样就不会把那些没用的Cookie信息也一并序列化了。
来源:http://www.blogkid.net/archives/1335.html
对于一般的爬虫们发起的请求,自然是不带有Cookie的,也可以容易地使用缓存。但通过Firefox打开网站,在使用帐户登录以前,我也以为是不带有Cookie、可以使用缓存的。但实际情况是一直都不能成功使用缓存,以为是个案,所以没有管。直到前些日子用了memcached,又忍不住开工调试。
最后发现是cookie中的 AJSTAT_ok_times和AJSTAT_ok_pages在捣乱。在我没做任何设置时,这两个值就随着我访问网站出现在cookie列表里。我仔细搜索也没找到关于这两兄弟的细节,比如为啥会自己出现在cookie中。不过我猜测ok_times应该是记录访问这个网站的次数,ok_pages用来记录访问的页数,不知道是不是正确。
找到了问题,就可以有针对性地做出修改了。比较好的办法是写一个新的类继承原有的类,然后重写一下make_id这个函数。不过我就直接改了Zend_Cache的源码。
在/Cache/Frontend/Page.php中,有个叫“_makePartialId”的函数,找到包含case = “Cookie”的一节,其中有一句:
$var = $_COOKIE;
改成
$var = array($_COOKIE['info1'],$_COOKIE['info2']…);
原理就是用一个类似filter 的东西把有效的Cookie信息进行重新打包成一个数组。这样就不会把那些没用的Cookie信息也一并序列化了。
来源:http://www.blogkid.net/archives/1335.html
评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=1399
这篇日志没有评论。
此日志不可发表评论。