我想出了一个有趣的方法来解决以下问题,我想知道是否有更好的方法来实现我的目标。
基本上,我正在创建一个基本的cms系统,用户可以注册自己的微型网站并拥有自己的用户。我正在使用asp.net会员资格api。
我想要一种方法来隔离各个微型网站的用户,以便通过www.mysite.com/johns-site进行身份验证的用户也不会通过www.mysite.com/pauls-site进行身份验证。
我还想要一种方法将用户名与微型网站相关联,这样如果用户在一个网站上注册为bob,则不会阻止另一个用户注册为不同微型网站的bob。
为实现这一点,我注意到在asp成员资格表中,用户属于某个应用程序。每次收到请求时,我都有一个方法可以根据URL切换web.config中的applicationName。
这确实很容易实现我的目标,但感觉有点hacky。是否有替代方式来切换成员资格提供者的应用程序?
答案 0 :(得分:2)
可以在运行时获取/设置ApplicatioName属性,但是根据下面的MSDN帖子,不建议使用它,因为该属性不是线程安全的,即如果多个用户同时为不同的应用程序创建帐户,没有正确地为每个用户分配ApplicationName。
语法:
Membership.ApplicationName = "MyAppName"
OR
Membership.ApplicationName = "MyAppName";
进一步阅读:
http://msdn.microsoft.com/en-us/library/system.web.security.membership.applicationname.aspx
注意:
您是否正在从应用程序代码更新web.config文件的内容?如果是这样,那肯定是“hacky”。另外,编辑web.config将删除所有活动会话(如果您的应用当然使用会话状态)。
答案 1 :(得分:0)
我同意,这可能会让你在某个时候付钱。
实现这一目标的正确方法将涉及每个virtual directory(或您所说的微型网站),每个<membership>
元素定义具有相同连接字符串但不同applicationName
属性的{{1}}元素。