在 ASP.NET 2.0 中跨域使用 Session

在 ASP.NET 2.0 中跨域使用 Session

我们有一个供用户登录的 Web 应用程序。该应用程序将登录信息保存在 Session 中。问题是同一个应用程序驻留在不同的域中,有时域之间存在链接 - 一个域与另一个域有链接。在这种情况下,单击链接后,用户将在另一个域中,并且必须重新登录。我们的用户不喜欢这种情况,因此我们正在寻找解决方案。

我们不愿意使用 Cookie,因为有时我们的用户会从不允许 Cookie 的公共计算机登录。我们也考虑过将登录数据保存在数据库中,但我们不想这样做,因为我们不想在每次加载页面时都添加对数据库的另一次访问。

那么有没有办法在几个域之间启用 Session?或者还有其他我们还没想到的解决方案?

注意:我们不使用 Active Directory 进行身份验证,而是使用 DB 身份验证。

答案1

我将使用数据库在域或不同技术(如经典 ASP、PHP 或 asp.net)之间共享会话。

您对每个页面的数据库访问的担心是有道理的,因此我使用一种方法,即使用正常的内存会话来存储每个页面的身份验证票证。只有当该会话不存在时,服务器端代码才会转到数据库。

有关此方法的更多信息,请访问“增强的 Asp.net 会话状态”

答案2

据我所知,这是不可能的。

有一次,当我们从“经典”asp 迁移到 .net 时,我们遇到了或多或少相同的问题。“经典”asp 页面不与新的 asp.net 页面共享会话。

我们做的是创建一个在两个“域”中“注册”用户的页面。当用户访问某个页面时,如果该页面验证该用户未通过身份验证,则新页面会询问旧页面是否在该页面上。

当然,这种方法存在很大的安全问题,我们只在迁移期间使用了它。为了使其更可靠,我们检查了页面的引用者等。

只是为了帮助您:DB 方法的另一个问题是,假设用户关闭浏览器而没有点击关闭/退出按钮。“会话”将在 DB 中处于活动状态。当然,您有办法处理它,但这会增加复杂性。

相关内容