2008-11-06 60 views
1

有3个网络应用程序。认证问题或错误

网站A和B都是具有FormsAuthentications配置的ASP.NET Web应用程序,并且在网站B中还有一个受保护的文件夹,该文件夹也在web.config中正确配置。 Site C是一个经典的ASP网站,它保持了Session的身份验证状态。

现在,请考虑以下步骤:

1,有是有目标的链接=“_空白”网站A的网页,并链接到网站B的受保护文件夹属性;

2,点击此链接,您应该在新的浏览器窗口中打开网站B并重定向到登录页面;

3,使用您的凭证登录然后通常重定向到受保护的页面,现在您可以浏览该网站的B页面当然; 4,现在关闭显示B站点受保护页面的浏览器窗口,点击浏览器关闭按钮或按Alt + F4;

5,然后再次单击网站A上的链接,现在您可以在不登录的情况下访问网站B的受保护页面。

6,在站点A的页面上还有一个target =“_ blank”的链接,并链接到站点C的受保护页面,站点C是一个ASP站点;

7,首先打开网站C的受保护页面,正好需要登录;

8,登录站点C,当然可以查看受保护页面,然后关闭浏览器;

9,再次单击链接到网站C,你可以发现自己已经被认证现场C.

哎呀。已经有10个步骤了,我认为这些都很无聊,但它们真的让我感到困惑了好几天。

有人知道这个问题吗? 非常感谢。

回答

1

ASP和ASP.NET都使用存储在浏览器进程内存中的会话cookie。从链接打开一个新的浏览器窗口不会启动一个新的进程,只是打开一个与原始窗口相同的进程拥有的新窗口。

关闭一个窗口不会'注销'会话,因为会话cookie将仍然在进程内存中,当另一个窗口访问该站点时,现有会话cookie将被发送,因此从站点的角度来看,这是仍然是一样的sesssion,这是绘制的正确推理。

编辑:这个问题在评论中提出,'如何避免'。最好的答案是:不要避免它,吸收它作为正常操作,并为自己节省一桶麻烦。

你所要求的是检测没有窗口当前正在显示特定应用程序的内容的方法。这真的很难达到。即使你在应用程序上只有一个窗口(不能保证),你也必须确保所有页面都捕获窗口上的onunload事件,并通知服务器应用程序正在注销。

如果它的关键是用户必须注销的应用程序,然后将其最好通过提供一些常见的标题中的每个页面上的注销链接在本页面你看现在来达到的能力。

通常为“登录”通过存储某种令牌在会话对象在ASP的会话被标记。构成该应用程序一部分的页面将检查该标记,并检查该标记是否存在重定向至登录页面。

要注销被删除会话值和重定向到登录页面的客户端。

在ASP.NET中,FormsAuthentication具有SignOut和RedirectToLoginPage方法,Forms Authentication自动处理重定向到登录页面。

+0

谢谢,安东尼。 但现在我想避免这个问题。 那我该怎么办? 设置cookie超时或其他方法? 非常感谢。 – Shiny 2008-11-06 08:39:24

0

例如,使用session.abandoned on window.close事件。

创建将在报头和捕捉事件window.close加载功能。 不要忘记验证前一页是否来自同一个域/ IP。 因为你的用户可以忘记注销并去其他网站,然后点击返回按钮...