每个子域上有多个域,相同的应用程序但结果不同。如何跟踪子域的帐户?

时间:2011-09-02 10:37:23

标签: asp.net iis subdomain

我有一个用户可以注册的Web应用程序。每个用户都会在其帐户中获得子域名。每个子域都是独一无二的,但使用与其他人相同的Web应用程序。

该应用程序是.net,我在iis 2003或2008上运行它(尚未完成。)我的目标是大约1000个用户。 (1000个子域名)

例如:

user1.mydomain.com
user2.mydomain.com
user3.mydomain.com   alias sub.something.com

当您看到域的别名时,并不总是可以从子域名获取帐户ID。

所以我在考虑不同的方法。 1:对于每个页面请求,执行数据库查找并返回帐户的ID。缺点?额外的数据库通信并且包含所有用户的所有域名的表格,每次请求页面时在数据库中进行文本搜索都不是一个好主意。

2:作为数字1,但accountId保存为会话。但是1个thousend帐户会发生什么,而且每个帐户都有1000个查看器,使用了大量的内存?

3:我不知道这个是否可行,但我认为这是一个很好的... 我在考虑创建所有子域名.. User1。,user2。,user3 .... 并且每个子域的别名都保存在IIS中。 在所有域的每个文件夹中,我创建一个ID文件。只包含用户的ID:

id.aspx
-----
accountID = ##;
-----

之后我希望应用程序的所有文件都虚拟地包含在每个子域中。

说明: 每个子域包含以下文件:

id.aspx
file1.aspx virtual file from web.mydomain.com
file2.aspx virtual file from web.mydomain.com
File3.aspx virtual file from web.mydomain.com
....

和file1 ... 3是IIS上的其他位置。 这可能吗?

那么请问,这里有人可以帮我解决这个问题吗? 我该怎么办? 我猜这是一个普遍的“问题”,许多人已经解决了这个问题。

感谢您抽出时间阅读本文。

最诚挚的问候 磨砂

1 个答案:

答案 0 :(得分:1)

对我来说,从管理角度来看,#3可能是挑战。我宁愿采用类似于#2的方法 - 你的映射存储在数据库中。当用户登录时,将执行查找并在会话状态中缓存帐户ID。如果您已经将会话状态用于其他内容,那么添加此位信息实际上不是开销。否则,您可以考虑用于缓存此信息的其他选项 - 例如,它可以放入cookie中(当然,您必须添加加密/校验和等机制以避免篡改)。您还可以将帐户ID作为用户身份的一部分(通过将其推入身份验证cookie,无论如何都是由ASP.NET运行时进行防篡改)。

考虑到你有1000个用户,我很可能会选择构建内存查找表(将字典存储在ASp.NET缓存或静态变量中),考虑到每个用户10个别名,它不会超过10000个条目 - 在应用程序启动和开始每个请求时构建表,查找并获取帐户ID并将其存储到HttpContext中,以便它可用。