-Update folgende Gespräch:
Darf ich vorschlagen, dass Sie einen Filter implementieren, die Crawler über Request-Header und die Protokollierung der Anon Cookie, die Sie später am selben Tag identifizieren. entschlüsseln und löschen Sie den Datensatz anon aspnet_profile und aspnet_users mit der zugehörigen UserId.
Sie könnten einen verlorenen Kampf kämpfen, aber zumindest bekommen Sie eine klare Vorstellung davon, woher der gesamte Verkehr kommt.
AnonymousId Cookies und, per Proxy, anonyme Profile sind für 90 Tage nach der letzten Verwendung gültig. Dies kann dazu führen, dass sich die Anon-Profile häufen.
Eine sehr einfache Möglichkeit, dies zu handhaben, ist ProfileManager
zu verwenden.
ProfileManager.DeleteInactiveProfiles(ProfileAuthenticationOption.Anonymous, DateTime.Now.AddDays(-7));
löscht alle anonymen Profile, auf die in den letzten 7 Tagen nicht zugegriffen wurde.
Aber das lässt Sie mit den anonymen Datensätzen in aspnet_Users. Membership
stellt keine ähnliche Methode wie ProfileManager
zum Löschen von veralteten anonymen Benutzern zur Verfügung.
So ...
Die beste Wette ist eine rohe SQL-Angriff, Löschen von aspnet_Profile, wo Sie sie für veraltet halten, und führen Sie dann die gleiche Abfrage auf aspnet_User wo IsAnonymous = 1
.
Viel Glück damit. Sobald Sie es aufgeräumt haben, bleiben Sie einfach oben drauf.
Aktualisiert Update:
Der folgende Code ist nur gültig auf IIS7, und wenn Sie alle Anfragen durch ASP.Net Kanal
Sie könnten ein Modul implementieren, die für Anforderungen an robots.txt
Uhren und Holen Sie sich den anonymen ID-Cookie und speichern Sie ihn in einer Robots-Tabelle, mit der Sie Ihre Mitgliedschafts-/Profiltabellen von Robot Meta jede Nacht sicher löschen können. Dies könnte helfen.
Beispiel:
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));
}
}
}
}
Referenz: http://www.codeproject.com/Articles/39026/Exploring-Web-config-system-web-httpModules.aspx
Welche Indizes haben Sie auf Ihre Tabellen zu haben? Verwenden Sie den Standardprofilanbieter? –
@Daniel, ich habe keine zusätzlichen Indizes, nur die Vanille .Net-Mitgliedschaft eingerichtet. Wir verwenden einen benutzerdefinierten Profilanbieter. – Mantorok
@Mantarok - hatte eine Idee, überprüfen Sie die aktualisierte Antwort. –