Java 防止spider累积Tomcat会话

Java 防止spider累积Tomcat会话,java,session,tomcat,servlets,Java,Session,Tomcat,Servlets,我在Tomcat上运行了一个相当新的网站(大约有3周了),但到目前为止访问人数还很低 上周我注意到1000多个活动会话,检查Tomcat的localhost_access*日志显示 绝大多数来自这一范围内的IP:119.63.196.*看起来都属于百度日本 这里有一个小例子,来自他们登上头版的日志。 119.63.196.107---[24/Aug/2011:07:02:46+0000]“GET/;jsessionid=94085f76780acfd96c8109a2946288d HTTP/1

我在Tomcat上运行了一个相当新的网站(大约有3周了),但到目前为止访问人数还很低

上周我注意到1000多个活动会话,检查Tomcat的localhost_access*日志显示 绝大多数来自这一范围内的IP:119.63.196.*看起来都属于百度日本

这里有一个小例子,来自他们登上头版的日志。 119.63.196.107---[24/Aug/2011:07:02:46+0000]“GET/;jsessionid=94085f76780acfd96c8109a2946288d HTTP/1.1”200 10311 119.63.196.44---[24/Aug/2011:07:03:21+0000]“GET/;jsessionid=943133c77bb1756cf11592115ba81725http/1.1”200 10333 119.63.196.39---[24/Aug/2011:07:03:56+0000]“GET/;jsessionid=9B4384BDECF540C8628467F7AB4AB463 HTTP/1.1”200 10311 119.63.196.19---[24/Aug/2011:07:04:31+0000]“GET/;jsessionid=A0B55C3A18377D993B97D4491DD1012 HTTP/1.1”200 10311 119.63.196.45---[24/Aug/2011:07:05:10+0000]“GET/;jsessionid=A3782FA61558BF11C4D5AC4F3DD1EC86 HTTP/1.1”200 10311 119.63.196.23---[24/Aug/2011:07:05:53+0000]“GET/;jsessionid=A3AF84EF13F21492EB47FAB001A1C2E5 HTTP/1.1”200 10311 119.63.196.120---[24/Aug/2011:07:06:31+0000]“GET/;jsessionid=A7C490CEC2C7F2969772AC4050C6D761 HTTP/1.1”200 10311 119.63.196.108---[24/Aug/2011:07:07:07+0000]“GET/;jsessionid=A7F769D354CB37E99843292D650D6367 HTTP/1.1”200 10311

没有一个单独的IP正在破坏该站点,但是来自该IP范围的集体请求正在累积活动会话。他们似乎是以某种协调的方式来做的,因为一次一个页面会成为目标,在119.63.196.*IP范围内,在20分钟的时间内收到30次不同的点击。然后它会转到另一页。。。这几乎一整天都在进行,并且不断增加Tomcat会话

我确实把非活动会话超时设置得很高(720分钟),也许我需要把这个数字降低很多。也许百度日本正在做频繁的检查,因为它认为页面已经因为链接的改变而改变了(例如,jsessionid总是不同的)

谢谢你的阅读。我欢迎任何/所有建议


Eric

爬行器实际上通常不会与网站保持会话。这很正常。您应该问问自己,如果您的网站根据正常的GET请求创建会话,是否真的有必要。会话通常用于存储登录的用户及其首选项,如区域设置等。但是爬行器根本不登录,也根本不提交任何表单。那么为什么要创建会话呢

解决这个“问题”基本上有两种方法:

  • 修复您的网站,使其不会不必要地创建会话,只要不需要。仅在用户登录或创建/更新会话范围的首选项/变量后创建它。具体如何做取决于您的网站使用的API/框架

  • 阻止(特定)蜘蛛


  • 请注意,会话创建和会话本身并不特别昂贵。空会话对象的分配不应超过1KB。我发现您的会话超时太高。30分钟的默认时间已经相当多了。作为一个完全不同的替代方案,您还可以将其设置为5分钟或其他时间,并引入一个JS/Ajax“heartbeat”,每当用户在文档上处于活动状态时(单击、按键等),它会每超时1分钟用会话cookie发送一个轮询请求。这将使服务器上的会话保持活动状态。您可以在中找到一个示例。

    如果配置
    CrawlerSessionManagerValve
    ,Tomcat 7可以阻止创建数千个会话。有一个短路

    此外,您可能需要考虑防止Tomcat将会话ID放入URL中,因为它会在搜索引擎中显示出来。再次从Tomcat 7开始,您可以配置:

    <session-config>
       <tracking-mode>COOKIE</tracking-mode>
    </session-config>
    
    
    曲奇
    
    伟大的思想食粮,不列颠哥伦比亚省。我相信我有充分的理由在主页上为未登录的用户使用一个会话(我正在创建一个动态投票,这样就不容易玩了),所以我可能不得不坚持这种方法;不幸的是,一块曲奇饼不适合这个。如果你真的好奇,我可以解释得更多。(续)在我发表第一篇博文的前一天左右,我实际上为Baiduspider输入了一个robots条目,禁止一切(即“/”),但我继续在日志中看到“Baiduspider”(用户代理),所以我认为他们不尊重我的robots.txt。然而,从大约2天前开始,来自该IP范围的点击完全停止。也许这只蜘蛛是合法的。我想我会在某个时候删除这个条目,看看会发生什么。因此,我的活动会话大大减少。(续)只需将该投票放在POST表单中,并仅在第一次提交时创建会话。Spider真的不运行POST表单之类的东西。我之所以选择高会话超时,是因为我喜欢Gmail等网站让我在没有活动的情况下保持24小时登录。Ajax心跳无疑是一种有趣的方法。此外,知道一个空会话obj如此之小也是令人鼓舞的。我可以保持我的网站相当精简。不管怎样,我真的很感谢你的信息!许多好的金块要考虑。谢谢EricGmail(实际上,所有Google站点)使用一个与会话cookie完全独立的长寿cookie。如果Gmail在没有会话的情况下使用cookie检索请求,它只会创建会话并根据加密的cookie值自动登录用户。有关背景详细信息,请参见此答案: