【问题标题】:SQL Server to manage ASP.NET sessions doesn't work用于管理 ASP.NET 会话的 SQL Server 不起作用
【发布时间】:2012-06-05 04:23:45
【问题描述】:

我按照How to configure SQL Server to manage ASP.NET sessions 中的方向创建 ASPState 数据库。 我在 IIS 7 中有 2 个 Web 应用程序。在 IIS Web 应用程序设置中,我转到“会话状态”并将会话状态设置为“SQL Server”并提供连接字符串。 在每个 Web 应用程序 web.config 中,我添加了

<sessionState
       mode="SQLServer"
       allowCustomSqlDatabase="false"
       sqlConnectionString="data source=server;user id=user;password=password"
       cookieless="false"
       timeout="7200"
/>

我创建一个会话,

Session["Data"] = "test"

在 Web App A 中,在同一浏览器中转到 Web App B 进行打印

Response.Write(Session["Data"]);

它什么都没有显示。我可以看到表中有数据:ASPState 数据库下的 ASPStateTempApplications 和 ASPStateTempSessions。另外,我在事件日志中看不到任何错误。谁能想到我做错了什么?

谢谢!!

【问题讨论】:

  • 您是否使用相同的域名访问两个应用程序?
  • 是的,它在本地主机上。是localhost:8080/WebApp_Alocalhost:8080/WebApp_B
  • @windforceus 现在明白了,你尝试从应用 A 到应用 B。这是不可能的!

标签: asp.net iis-7 sql-server-2008-r2 session-state


【解决方案1】:
You can not get session that belongs to App-A from App-B and vice versa.

会话与cookies相连,app-a和app-b的cookies不同,是随机制作的。即使设置了一些相同的 cookie,然后数据库将会话与应用程序 ID 连接起来,每个应用程序的 ID 也是不同的。

所以即使是同一个数据库,应用id不同,cookie也不同,无法从a到b获取session。

存档的唯一可能方法是制作您的自定义会话代码,并且有些方法知道您在 app-A 和 app-B 上具有相同的用途,因此将它们连接在一起。

【讨论】:

  • 您好 Aritos,您需要为 Web 应用程序配置 IIS 设置吗?我是否需要执行此步骤 ->(在 IIS 中,转到 Web 应用程序设置,转到“会话状态”并将会话状态设置为“SQL Server”并提供连接字符串。)
  • 我做了这些,但仍然没有得到数据。当我浏览网页时,我可以在 ASPStateTempSessions 表中看到过期日期变化,但我无法获取会话数据。
  • 嗨,Aristos,听起来很棘手。那么有没有好办法让多个 Web 应用程序在同一台服务器上共享同一个会话?我使用 Session State 的原因是试图让多个 Web 应用程序共享同一个会话,例如在 Web A 中登录并继续在 Web B 中浏览而无需登录。
  • @windforceus 仅当您自定义它时。您制作了一个自定义数据库,以及如何将用户的 cookie 与数据连接起来。接下来,您可以找到一种方法在两个不同的应用程序上连接相同的 cookie,可能是通过用户登录或类似的方式。需要一点设计。默认情况下,会话有许多安全步骤来避免这样做。认为如果他们允许这样做,在共享环境中就可以从其他用户那里读取会话数据。
  • 感谢您的时间和精力,我标记这是答案,sux 我浪费了 2 天,意识到这是不可能的。
猜你喜欢
  • 2011-11-15
  • 1970-01-01
  • 2011-06-20
  • 2013-03-15
  • 2011-12-17
  • 2013-10-03
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
相关资源
最近更新 更多