ApplicationName 得到的启示
不知道大家有没有遇到过这样的情况,在测试环境中,ASP.NET程序一切运行正常,可一旦部署到远程IIS server上时,membership验证就出现问题了,Login控件提示“登录失败,请重试”。如果你遇到过这种情况,请看如下解释。
这大都是由于ApplicationName引起的。我们在web.config中配置membership,role,profile等信息时,正常都会添加上ApplicationName='/'或ApplicationName='specificName'。如果你没有配置ApplicationName,那么这个问题就出现了。
简单的说,membership验证时是需要知道application的名字的。如果你配置了,那么一切都OK。如果你没配置,它默认会添加上虚拟目录的名字。这样就有问题了,因为我们在远程IIS中很可能使用了不同名字的虚拟目录,这就导致了原来的用户无法得到验证。
如果你不信的话,可以在自己的机器上修改membership的ApplicationName配置,然后你再试试原来的用户能否通过验证,答案是:不能。
ApplicationName的配置可以是一个特定的name,如MyApp。也可以是一个斜杠'/',它将使用ASP.NET 2.0默认配置。ApplicationName是存储在membership数据库的aspnet_Applications的表中的,大家可以check下。同时,每个用户都会对应一个applicationID(check aspnet_Users表),这就是为什么改了ApplicationName后,原先的用户将无法验证的原因了。
还是老话,问题虽小,希望大家能理解其中的原理,对今后有所帮助!同时,我也希望大家能够说说自己的理解和感受,并把自己的一些经验分享出来,让所有人都能得到提升!
Have a nice day!