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

Memcahed分布式缓存服务替换Session解决方案

个人觉得以下内容不是特别成熟,不过可以用来做个参考。关于memcached做此类事情,张宴那里好象有不少资料,权当是参考吧?

全文如下:
http://www.cnblogs.com/xuanfeng/archive/2009/06/04/1494735.html
需求:

       有个ASP.NET网站系统,有一级域名,二级域名,三级域名,系统的各个功能模块分布在不同的域名,同一域名的也有可能分布在不同省份的服务器或者同一同一省份的不同的服务器中,同一省份的的服务器可以通过内部局域网访问。在系统中,现在需要所有功能模块共享用户会话信私有数据。

常用的方式是启用Session的数据库持久会模式可以达到上面的需求(没尝试过),现在需要使用Memcached分布式缓存服务来达到保存用户的会话数据,而达到各个功能模块都能够跨省份、跨服务器共享本次会话中的私有数据的目的。

解决方案:       

     每个省份使用一台服务器来做为Memcached服务器来存储用话的会话中的数据,当然也可以多台服务器,但必须确保每个省份的做Memcached服务器数量必须一致,这样才能够保证Memcached客户端操作的是同一份数据,保证数据的一致性。

会话数据的添加、删除、修改:

Memcached客 户端,添加、删除和、修改会话信息数据时,不仅要添加、删除、修改本省的Memcached服务器数据,而且同时要对其它省份的Memcahed服务器做 同样的操作,这样用户访问其它省份的服务器的功能模块进也能读取到相同的会话数据。Memcached客户端服务器的列表使用局域网的内网 IP(如:192.168.1.179)操作本省的Memcahed服务器,使用公网的IP((如:202.183.62.210))操作其它省份的 Memcahe服务器。

会话数据的读取

系统所有模块读取会话数据的Memcached客户端服务器列表都设为本省Memcached服务器地址的内网IP来向Memcahed服务器中读取会话数据。

 

大小: 202.91 K
尺寸: 319 x 376
浏览: 1590 次
点击打开新窗口浏览全图   

  如 上图所示,A省有四台服务器,B省也有四台服务器,两个三份都有三台Web服务器、一台Memcached服务器,且A省四台服务器同在一个局域网内的可 能通过内网IP相互访问,B省也一样。假如:A省的A1,B1,C1这三台Web服务器其中的一台要添加或修改、或删除会话数据,它首先调服 Memcached客户端使服D1服务器的内网IP向D1服务器中添加或修改、或删除会话数据,操作完成后,还用调用Memcache客户端使服D2服务 器的公网IP向D2服务器做同样的操作,这样才算完整的操作过程,也可以当做一个事务来处理。假如:A省的A1,B1,C1这三台Web服务器其中一台服 务器想要读取会话的数据,只需要调用Memcached客户端使服D1服务器的内网IP读取数据即可,如果发现该数据不存在,即做向Memcached服 务器添加数据的相关业务处理。B省处理逻辑同A省。 

 同一会话的确认:

        使用Cookie来保持客户与服务端的联系。 每一次会话开始就生成一个GUID作为SessionID,保存在客户端的Cookie中,作用域是顶级域名,这样二级、三级域名就可以共享到这个Cookie,系统中就使用这个SessionID来确认它是否是同一个会话。

        

会话数据的唯一ID

    会话数据存储在Memcached服务器上的唯一键Key也就是会话数据数据的唯一ID定义为:SessionID_Name, SessionID就是保存在客户端Cookie中的SessionID, Name就是会话数据的名称,同一次会话中各个会话数据的Name必须是唯一的,否则新的会话数据将覆盖旧的会话数据。

会话的失效时间:

       会话的失效通过控制Cookie的有效时间来实现,会话的时间设为SessionIDCookie中的有效时间,且每一次访问SessionID时都要重新设置一下Cookie的有效时间,这样就达到的会话的有效时间就是两次间访问CookieSessionID值的的最长时间,如果两次访问的间隔时间超过用效时间,那么保存在SessionIDCookie将会失效,并生成新的SessionID存放在Cookie, SessionID改变啦,会话就结束啦。

Memcached服务器中会话数据的失效

      每 一次向Memcache服务器中添加会话数据时,都把有效时间设为一天也就是24小时,让Memcached服务使用它内部的机制去清除,不必在程序中特 别做会话数据的删除操作。数据在Memcache服务器中有有效时间只是逻辑上的,就算是过了24 小时,如果分配给Memcached服务的内存还够用的话,数据还是保存在内存当中的,只是Memcache客户端读取不到而已。只有到了分配给 Memcached服务的内存不够用时,它才会清理没用或者比较旧的数据,也就是懒性清除。

 


关于张宴博客上一些memcached的资料,建议查看:http://blog.s135.com/category/13/
虽然对于存储session之类的没有介绍,但他介绍的分布式存储,如果运用起来就是实现上面的效果哦。。


Tags: memcached

google reader使用帮助

本来不想写这篇文章的,但想想还是需要写一下,因为我的RSS文章输出是全文,而很少用摘要。问题就出在这里:http://www.cnblogs.com/yuylyp/archive/2009/06/03/1495168.html,这位朋友对RSS全文输出非常不满,因为他是用google reader的。

事实上,我也是使用google reader,但我没有觉得全文输出不好啊。因为我免除了打开对方网站的速度问题,东西都由google做了一遍缓存,通过google打开,速度要快上很多了。

再者,一些墙外的博客,我怎么看?用Reader订阅一下,由google帮我下载下来,如果他们不是用全文,那我怎么办??

所以,贴上一些greader的快捷键,方便各位观看

调出快捷键帮助也很简单,在阅读区,输入?就可以了。(是英文的?,不是中文的?)

或者打开网址:http://www.google.com/support/reader/bin/answer.py?hl=en&answer=69973,也可以查看

我这里再附上图片:

图片附件(缩略图):
大小: 166.13 K
尺寸: 500 x 365
浏览: 1780 次
点击打开新窗口浏览全图

Tags: google reader

如何混淆电子邮件来防止垃圾发送者

这是一篇来自cssrain站长的译文。很多时候,我们都不敢在自己的勃客、网站上留下自己的mail,因为 这会带来大量的垃圾邮件。
但如果不留mail,又会让很多用户、过客无法与自己联络,这真是一个两难的问题。在几年前就有那种把email改成用document.write输出的情况。但这种并不实用。

看完这篇文章,或者你应该有相对较好的方法来处理你的邮件,不过我个人推荐的是这种;

XML/HTML代码
  1. <!--这是一个简单的例子,可能并不能运行,我是直接手工输入的,没有debug,只是介绍原理-->  
  2. <a href="#" onclick="sendmail()" id='sendmail'>gou<span class="bgcolor">0982134</span>ki@<span class="bgcolor">0912ujf</span>neatdns.com</a>  
  3. <script>  
  4. function sendmail(){  
  5.     $('#sendmail span').remove();  
  6.     //然后反$('#sendmail').text() 拷贝到剪贴板,给用户提示一下  
  7. }  
  8. </script>  

改写了一下,终于可以走通了,不会用clone,只能用这种替代方案了。。代码较差:

XML/HTML代码
  1. <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>  
  2. <style>  
  3. #sendmail span{display:none}  
  4. #hiddenmail {display:none}  
  5. </style>  
  6. <a href="#" id='sendmail'>gou<span>0982134</span>ki@<span>0912ujf</span>neat<span>091r</span>dns.com</a><span id="hiddenmail"</span>  
  7. <script>  
  8. $(document).ready(function(){  
  9.     $('#hiddenmail').html( $("#sendmail").html());  
  10.     $("#hiddenmail span").remove();  
  11.     $('#sendmail').attr("href" ,"mailto:"+$("#hiddenmail").text());  
  12. });  
  13. </script>  
这种情况,邮件地址可以正常显示,但如果从网页上选择邮件地址再复制的话,就会把span所包含的内容也复制进去了。个人觉得这样处理比较好,对于span里的内容,可以通过程序生成插进去。位置也可以不一样,这样别人就无法直接复制网址了。而且点击后也能够发送邮件。但问题同样明显,如果禁用了javascript,那就会出现一堆无效字符

 

以下是66[cssrain站长]翻译的文章内容:

一直以来我都认为” mailto: “是一个神圣的链接。通过它,我可以在网页中发布我的email地址,并且任何人都可以通过单击这个链接联系我。当然前提是在一个纯洁的Web环境下 ---在垃圾邮件发送者出来之前。举个例子说:今天你在你的网页中使用了” mailto: “,那么30秒后你将收到第一封伟哥信息。垃圾邮件发送者的速度之快另你惊讶。从今以后,你将收到越来越多的垃圾邮件。那么我们有什么办法,在自己的网页 中发布自己邮箱的同时,不引起垃圾邮件发布者的注意呢?

最明显的解决办法是在你的HTML中使用机器不可读的Email。比如:“bob (at) bobsdomain dot com”。虽然这可以使垃圾邮件发送者不再那么容易,但它同时也会为难您的用户。

另一种选择是使用JavaScript生成的电子邮件地址 ,然后对字符串加点编码。如:

<p>contact :
<script type="text/javascript">
document.write('<a href="mai'+"lto"+"bob"+'@'+'bobsdomain.com">bob@'+"bobsdomain.com</a>");
</script>
</p>

 

这将阻止大多数垃圾邮件发送者,但如果用户禁用JavaScript将不会看到您的地址。
(我不推荐使用 document.write() )

一个更好的解决办法是使用它们两者相结合的技术,以阻止垃圾邮件,同时不会造成用户的困难。

首先在我的网页中使用一个人性化的,同时垃圾邮件发送者不能收集的email地址。我们还将它链

接到一个联络网页,例如:

< p>Contact <a href="contact.html" class="email">bob (at) bobsdomain dot com</a></p> 

请注意,我们为链接添加了一个class,并设置为”email”

接下来写一个JavaScript函数搜寻网页的伪装的电子邮件,并将它转换成真正的mailto:链接。

我们将创建一个' email.js '文件,将它包括在我们的HTML
< script type="text/javascript" src="email.js"></script>

 

所需要的代码很短,代码如下:
function EmailUnobsfuscate() {
 //查找所有的a
 var link = document.getElementsByTagName && document.getElementsByTagName("a");
 var email, e;
 for (e = 0; link && e < link.length; e++) {
  // 判断当前link的class是否含有"email"
  if ((" "+link[e].className+" ").indexOf(" email ") >= 0) {
   // 获取全小写的email地址
   email = link[e].firstChild.nodeValue.toLowerCase() || "";
   // 转换email地址
   //将dot转为.
   email = email.replace(/dot/ig, ".");
   //将(at)转为@
   email = email.replace(/\(at\)/ig, "@");
   //将空格转为"" 
   email = email.replace(/\s/g, "");
   //判断是否为有效email
   if (/^[^@]+@[a-z0-9]+([_\.\-]{0,1}[a-z0-9]+)*([\.]{1}[a-z0-9]+)+$/.test(email)) {
    // 把真正的email插入到页面中
    link[e].href = "mailto:" + email;
    link[e].firstChild.nodeValue = email;
   }
  }
 }
}

 最后,我们需要确保在网页加载完毕后运行email.js

window.onload = EmailUnobsfuscate;

使用两者结合的结果是:

1、我们的原始HTML网页中没有mailto:链接,同时也不会轻易收到垃圾邮件发送者发来的垃圾邮件。

2、绝大多数的用户(那些启用JavaScript )将看到一个标准的电子邮件地址和mailto:链接。

3、少部分禁用脚本的用户可以看到bob (at) bobsdomain dot com的地址。

说了这么多,意图就是展示这些概念,而不是这些代码。尽管例子能正常工作,但我还是建议你:

1、使用您自己的伪装电子邮件格式,例如:bob {@} bobsdomain – dot - com

     因为垃圾邮件发送者可以阅读这篇文章后变换编码的电子邮件,然后轻易的对付你!

2、使用不同的链接标识符--- “email”有点明显!

3、使用JavaScript库,例如jQuery ,使代码更为简短。您还应该确保它应付空格或其他DOM
点周围的电子邮件地址文字(不处理的代码段)。

4、使用一个更强大的事件处理程序来取代window.onload

 

 

祝您好运。


例子演示: http://www.cssrain.cn/demo/howtoemail.html

原文地址: http://www.sitepoint.com/blogs/2009/05/05/stop-spam-harvesting-email-obfuscation/

Tags: 混淆

更换统计代码

原来的统计是用的yahoo的,今天一登录就提示我切换统计代码

迁移公告

尊敬的用户:

  感谢您对雅虎统计的一贯信任和支持!为了向您提供更稳定更专业的统计服务,雅虎统计将更名为“量子恒道统计”,将网站地址迁移到www.linezing.com,并承诺一直为广大站长提供免费的统计服务。原有的雅虎统计将于2009年7月31日停止服务。

  您已经成功地将您的雅虎账号迁移到量子恒道,由于雅虎统计即将停止服务,请您及时将原有的雅虎统计代码更换为量子恒道统计代码。

  如果您未及时向量子恒道迁移,则雅虎统计关闭后,您将无法继续获得数据服务,并可能给您的网站带来潜在的风险。为了保障您的数据和网站的安全,请您尽快迁移。

  您的数据已经完整地迁移到了量子恒道,在迁移期间,您的数据在量子恒道会被正常统计。相关问题请查看迁移帮助,或者去量子恒道论坛提问,客服人员会尽快帮助您解决。

  再次感谢,您的信任和支持是我们不断努力前进的动力!


       量子恒道统计( 原雅虎统计)

 

进入量子恒道后,提示我:

更换统计代码提醒

尊敬的用户:

  欢迎您来到量子恒道统计!

  由于雅虎统计即将停止服务,请您及时将原有的雅虎统计代码更换为量子恒道统计代码。

  如果您未及时更换统计代码,在雅虎统计停止服务后,放置过雅虎统计代码的页面,将出现速度变慢甚至不能访问的情况。而量子恒道统计也无法为您提供有效的统计报表。

  具体更换步骤请查看这里

量子恒道统计

唉。难道yahoo连统计也撑不下去了?感慨一下。不过我还是换了。如果还有下次就直接上google了。我相信google短时间内不会做出这种事情的

Tags: 统计

简单的处理thunder,flashget,qqdl的加密下载字符串

其实这些东西都是根据网上的资料来解决的。
那些下载字符串,在去除协议后,都是采用BASE64加密过,所以,先解密一下,再处理,就很方便了。

其中,迅雷是在解密后的字符串两头加了“AA”和“ZZ”两个字符串
flashget则是加了[FLASHGET]标签
QQ则最简单,啥也没加,解密后就能用。

flashget在处理前,需要先把&以后的字符串全部清空再作Base64的解密转换。

不多说,源码如下:

PHP代码
  1. function decode ( $string )  
  2. {  
  3.     $exp = explode"://"$string );  
  4.     $type = strToLower$exp[0] );  
  5.     if ( $type == 'thunder' ){  
  6.         return str_replace(array("AA","ZZ"),"",base64_decode$exp[1] ));  
  7.     }else if ( $type == 'flashget' ){  
  8.         $exp[1] = subStr$exp[1], 0 , strPos$exp[1], '&' ) );  
  9.         return str_ireplace("[flashget]","",base64_decode$exp[1] ));  
  10.     }else if ( $type == 'qqdl' ){  
  11.         return base64_decode$exp[1] );  
  12.     }  
  13. }