背景:
我正在研究传统的ASP.NET 3.5 Web窗体应用程序。该应用程序允许用户购买为他们生成的“白标”网站的订阅,他们可以进一步定制。它使用表单身份验证。
典型的用例是用户在我们的系统上创建帐户,购买网站,然后继续定制他们的网站。他们用来编辑购买网站的网址如下:https://www.example.com/EditWebsite.aspx
。我们的网站编辑工具箱中还有许多其他页面和其他网址。
问题:
我的团队现在的任务是允许人们使用一个帐户访问多个网站订阅。这意味着,如果一个经过身份验证的用户使用上述网址,则可能会尝试访问其中一个网站进行编辑。我们的系统可以让每个用户知道多个subscriptionIds,但网站编辑器Web应用程序只支持一个订阅。
用一个更简单的例子来澄清:如果Google突然允许您使用一个GMail帐户查看两个不同的收件箱,就会这样。如果两者的URL相同,系统将如何知道您尝试访问哪一个?
我们最初想要更改应用程序以使用以下网址:https://www.example.com/[subID]/EditWebsite.aspx
,它会向我们提供将用户发送到正确网站所需的所有信息。我们查看URL Routing来完成此操作,但似乎我们必须更改所有Web应用程序的内部链接以使用路由配置生成正确的URL。也许我们在这里有错误的想法,但似乎对遗留应用程序来说太多了。
我们想出的另一个可能的解决方案就是使用我们系统的控制面板网络应用程序(他们点击链接来编辑他们的任何网站)来设置会话cookie,我们的编辑网站Web应用程序可以读取该会话cookie以了解哪个网站到培养。这样做的缺点是页面不具有书签功能,您无法在同一浏览器的不同选项卡中同时查看多个网站。
问题(S):
还有其他我们没有调查或想过的选择吗?是否有其他网站允许这种行为;他们是如何处理的? URL路由是否是正确的方法,我们只需要采取措施?
感谢任何输入!
答案 0 :(得分:0)
我们最终使用的解决方案是在链接中添加一个URL参数,指定您要编辑的网站。
https://www.example.com/EditWebsite.aspx?subID=123
此参数包含在列出所有用户网站的页面中“编辑网站”的链接中。
如果存在,则为用户设置会话cookie。如果请求参数不存在,则app会查找正在设置的cookie;这将处理应用程序中的所有内部链接。如果cookie不存在且未设置请求参数,我们只需从列表中选择经过身份验证的用户的第一个订阅。
这并不完美,但到目前为止它仍然没有问题。它造成的唯一后果是用户无法在同一浏览器会话中编辑多个网站,例如使用多个标签。这并没有导致任何支持问题,但它几乎不是问题。