数以百万计的匿名ASP.Net个人资料?

Man*_*rok 6 membership asp.net

更新:我刚刚意识到我们正在使用谷歌迷你搜索来抓取网站,以便我们支持谷歌搜索.这必然会创建一个匿名的配置文件,不仅可以进行每次抓取,甚至可以创建每个页面 - 这是可能的吗?

大家好,需要一些建议!

我们的网站每天大约收到50,000次点击,我们使用匿名的ASP.Net会员资料/用户,这导致数百万(当前4.5米)的"活动"配置文件和数据库"爬行",我们每夜都有一个任务清理所有不活动的.

我们无法拥有450万独立访客(我们的县人口只有1/2万),这可能是由爬虫和蜘蛛造成的吗?

此外,如果我们不得不忍受大量的配置文件,那么无论如何都要优化数据库?

谢谢

千电子伏

Sky*_*ers 2

更新以下对话:

我是否可以建议您实现一个过滤器,可以通过请求标头识别爬虫,并记录匿名 cookie,您可以在当天晚些时候进行记录。解密并删除带有关联 UserId 的匿名 aspnet_profile 和 aspnet_users 记录。

您可能正在打一场失败的战斗,但至少您会清楚地了解所有流量来自何处。


AnonymousId cookie 和代理匿名配置文件在上次使用后 90 天内有效。这可能会导致匿名配置文件堆积。

处理这个问题的一个非常简单的方法是使用ProfileManager.

ProfileManager.DeleteInactiveProfiles(ProfileAuthenticationOption.Anonymous, DateTime.Now.AddDays(-7));
Run Code Online (Sandbox Code Playgroud)

将清除过去 7 天内未访问过的所有匿名个人资料。

但这会在 aspnet_Users 中留下匿名记录。Membership不公开类似于ProfileManager删除陈旧匿名用户的方法。

所以...

最好的选择是原始 sql 攻击,从您认为过时的 aspnet_Profile 中删除,然后在 aspnet_User where 上运行相同的查询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));
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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