by Alpha
1. November 2008 20:14
按照我的理解,应该是当用户由匿名用户转变为注册用户的时候,执行一次,当身份是注册用户的时候,是不需要执行这个的。可是根据我的程序来看,并不是这样的!
匿名用户的时候是不会执行,可是当转变为注册用户的时候,每进行一次请求,都会调用一次,实在是不理解,难道是我哪里配置错误了么?
void Profile_MigrateAnonymous(Object s, ProfileMigrateEventArgs e)
{
ProfileCommon anonProfile =
Profile.GetProfile(e.AnonymousID);
Profile.LastVisit = DateTime.Now.ToString();
}
==========更新==========
发现问题所在了,参考了PetShop的代码,发现他里面是这样写的:
// Clean up anonymous profile
ProfileManager.DeleteProfile(e.AnonymousID);
AnonymousIdentificationModule.ClearAnonymousIdentifier();
// Save profile
Profile.Save();
看过之后恍然大悟,原来我的匿名用户的信息一直保留,系统会认为一直有匿名用户需要转换成注册用户,所以每次访问都执行迁移的代码,把匿名用户的信息删除掉之后得到了完美解决。
=========更新2============
用上面的代码之后,发现表aspnet_Users里面会保留曾经使用过的匿名用户,感觉这样不好,下面的代码可以解决。
Membership.DeleteUser(e.AnonymousID, true);
参数
- username
- 类型:System.String
要删除的用户的名称。
- deleteAllRelatedData
- 类型:System.Boolean
如果为 true,则从数据库中删除与该用户相关的数据;如果为 false,则将与该用户相关的数据保留在数据库。
返回值
类型:System.Boolean 如果用户已删除,则为 true;否则为 false。
//使用下面的语句可删除当前匿名用户的Profile信息
//ProfileManager.DeleteProfile(e.AnonymousID);
//使用下面的语句可删除当前匿名用户,并且删除匿名用户的Profile信息
//Membership.DeleteUser(e.AnonymousID, true);
//使用下面的语句可删除匿名用户的cookie
//AnonymousIdentificationModule.ClearAnonymousIdentifier();