Authentication 匿名用户支持vs谷歌机器人

Authentication 匿名用户支持vs谷歌机器人,authentication,googlebot,Authentication,Googlebot,我的web应用程序中有一个代表当前登录用户的User类。 每次用户访问页面时,都会根据cookie中提供的身份验证数据填充用户实例 即使匿名用户登录,也会创建一个User实例,并在数据库的User表中创建相应的新记录 这种方法允许我为当前用户保存一些状态信息,而不管其类型如何 然而,这种方法的问题在于谷歌机器人和其他非人类的网络生物在我的网页上爬行。每当一个机器人开始在站点上走动时,数据库中将创建数千条无用的记录,每一条记录只用于一个页面 问题:什么是最好的权衡?如何支持匿名用户,保存他们的状态

我的web应用程序中有一个代表当前登录用户的
User
类。 每次用户访问页面时,都会根据cookie中提供的身份验证数据填充
用户
实例

即使匿名用户登录,也会创建一个
User
实例,并在数据库的
User
表中创建相应的新记录

这种方法允许我为当前用户保存一些状态信息,而不管其类型如何

然而,这种方法的问题在于谷歌机器人和其他非人类的网络生物在我的网页上爬行。每当一个机器人开始在站点上走动时,数据库中将创建数千条无用的记录,每一条记录只用于一个页面


问题:什么是最好的权衡?如何支持匿名用户,保存他们的状态,并且不会因为没有cookieless的机器人而产生太多开销?

我认为最好的策略是手动为机器人添加“例外”。您可以执行以下两种操作之一:

A.不要为机器人创建用户对象(如果您的应用程序允许正常流量,这是最好的做法)
B.为bot创建单个用户对象,并在每次尝试加载页面时使用它

通常,用户可以检查请求的用户代理头,它将包括YahooSlurp、GoogleBot或其他类型的Bot

如果您使用的是.NET,则Page.Request.Browser.Crawler中有一个属性,该属性应指示它是否为机器人。我不确定这是否/如何在其他平台上体现


请注意,有些爬虫倾向于隐藏自己是一个爬虫的事实(我最近看到MSN这么做),只发送一个看起来像普通浏览器的用户代理字段,因此您必须按IP范围过滤这些内容,但这只是一个古怪的游戏,因此,你可能最终只能忍受这些情况。

谈到谷歌机器人:它有“自己的”用户代理。所以你可以检测到它。由于您只想为google bot提供公开可用的页面,所以恶意用户不会手动设置相同的用户代理。