数百万匿名的ASP.Net配置文件?

6

更新:我刚刚意识到我们正在使用Google Mini搜索来爬取网站,以便支持Google搜索。这不仅会为每次爬行创建匿名配置文件,甚至可能为每个页面创建一个 - 这是可能的吗?

大家好,需要一些建议!

我们的网站每天接收大约50,000次点击,并且我们使用匿名ASP.Net会员资料/用户,这导致有数百万(目前为4.5m)的“活动”资料和数据库正在“爬行”,我们有一个每晚清理所有非活动资料的任务。

我们不可能拥有450万独特的访问者(我们的县人口只有50万),这可能是由爬虫引起的吗?

此外,如果我们必须与这么多的资料一起生活,是否有任何优化DB的方法?

谢谢

Kev


你的表上有哪些索引?你正在使用默认的配置文件提供程序吗? - Daniel Dyson
@Mantarok - 有个想法,请查看更新后的答案。 - Sky Sanders
@code 一个想法,请求 robots.txt 文件时会触发 Http Module 吗?毕竟它不是一个 ASP.Net 文件。 - Mantorok
哦,那是一个问题。我使用VS开发服务器测试了该模块,它会通过asp.net运行一切。嗯... 您的Web服务器是否在运行IIS7? - Sky Sanders
没问题。我只是重新审视了这个问题,并考虑是否有一种可行的方法在IIS6上捕获robots.txt。很高兴我能帮到你。 - Sky Sanders
显示剩余4条评论
2个回答

2
更新以下对话:
我建议你实现一个可以通过请求头识别爬虫的过滤器,并记录匿名 cookie,稍后解密并删除与关联 UserId 相关的匿名 aspnet_profile 和 aspnet_users 记录。这样你至少可以清楚地知道所有流量来自哪里。
AnonymousId cookie 和匿名配置文件在上次使用后有效期为 90 天。这可能会导致匿名配置文件堆积。
处理这个问题的一个非常简单的方法是使用 ProfileManager。
ProfileManager.DeleteInactiveProfiles(ProfileAuthenticationOption.Anonymous, DateTime.Now.AddDays(-7));

清除所有未在过去7天内访问的匿名档案。

但这会使得aspnet_Users中保留匿名记录。 Membership不提供类似于ProfileManager用于删除过时匿名用户的方法。

因此...

最好的方法是采用原始的SQL攻击,从aspnet_Profile中删除您认为已过时的记录,然后在aspnet_User上运行相同的查询,其中IsAnonymous = 1

祝你好运。一旦清理干净,请继续关注它。


更新更新:

以下代码仅在IIS7上有效,并且如果通过ASP.Net通道传输所有请求

您可以实现一个模块来监视对robots.txt的请求,并获取匿名ID cookie并将其存储在机器人表中,以便您每晚安全地清除成员身份/配置文件表中的机器人元数据。 这可能有所帮助。

例如:

using System;
using System.Diagnostics;
using System.Web;

namespace NoDomoArigatoMisterRoboto
{
    public class RobotLoggerModule : IHttpModule
    {
        #region IHttpModule Members

        public void Init(HttpApplication context)
        {
            context.PreSendRequestHeaders += PreSendRequestHeaders;
        }

        public void Dispose()
        {
            //noop
        }

        #endregion

        private static void PreSendRequestHeaders(object sender, EventArgs e)
        {
            HttpRequest request = ((HttpApplication)sender).Request;

            

            bool isRobot = 
                request.Url.GetLeftPart(UriPartial.Path).EndsWith("robots.txt", StringComparison.InvariantCultureIgnoreCase);

            string anonymousId = request.AnonymousID;

            if (anonymousId != null && isRobot)
            {
                // log this id for pruning later
                Trace.WriteLine(string.Format("{0} is a robot.", anonymousId));
            }
        }
    }
}

参考资料: http://www.codeproject.com/Articles/39026/Exploring-Web-config-system-web-httpModules.aspx



我正在清理它们,但是我正在使用默认的非活动时间,我认为大约是60天,我可以很容易地将其更改为7天,但网站管理员希望它们尽可能长时间保留,因为它包含主页的自定义内容。因此,即使清除了60天前的档案,仍然保留了450万个... - Mantorok
@Mantorok- 你会为那些已经两个月没有访问过你的网站的用户保留匿名定制吗?听起来像是一种强制保留。你会记得你两个月前匿名访问的网站上做了哪些美学改变吗?只是说一下...;-) - Sky Sanders
我完全同意你的看法,我本来想让它再拖一周左右,但是我不得不接受命令。我可能需要和我们的网站经理再进行一次小的“交流” :-) - Mantorok
这是一个有趣的更新。你有关于我应该在头部查找什么细节吗?谢谢。 - Mantorok
谢谢,我现在会查看。请看我的最新更新 - Doh! - Mantorok

1

您可以尝试在Global.asax.cs文件的Session_End事件中删除匿名配置文件。

很有可能您的网站正在被爬取,无论是由合法搜索引擎爬虫还是非法爬虫寻找漏洞,以便黑客控制您的站点/服务器。无论您采取哪种解决方案删除旧的配置文件,都应该对此进行调查。

如果您使用默认的配置文件提供程序,该提供程序将所有配置文件信息保存在单个列中,您可能需要阅读这个链接,该链接是Scott Guthrie的文章,介绍了一个性能更好的基于表格的配置文件提供程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接