【问题标题】:Access ASP.NET Session in SQL Server mode across multiple applications跨多个应用程序以 SQL Server 模式访问 ASP.NET 会话
【发布时间】:2015-09-09 15:54:37
【问题描述】:

我正在尝试从不同服务器中的多个应用程序访问存储在 SQL Server 中的共享会话。

我已经读过这个Sharing sessions across applications using the ASP.NET Session State Service 但我没有运气。

以下是我如何设置两个应用程序的 web.config:

<sessionState 
    mode="SQLServer"
    allowCustomSqlDatabase="true"
    sqlConnectionString="Application Name=MyAppName; Data Source=MyDataSource; Initial Catalog=MyDBName; User Id=MyUser; Password=MyPassword"
    cookieless="false" 
    timeout="250" 
/>

这是我在两个配置文件中设置的机器密钥:

<machineKey validationKey="key1" decryptionKey="key2" validation="SHA1" decryption="AES" />

两个应用程序都可以读取和写入数据库。

我还调整了TempGetAppID 存储过程以克服应用程序名称的限制。这样,我的 SessionID 共享相同的后缀。

也就是说,ASPStateTempSessions 表中仍有 2 条不同的记录,它们具有不同的 SessionID

这是一个例子:

3nn53mh3j0vf3mrravuda11o9c8d4bee
oljchatkqzcje1ae1b3n2pst9c8d4bee

任何想法都将不胜感激!

编辑 1

我尝试在单个标签上同时使用 Chrome 和 IE。

【问题讨论】:

  • 这真的是您的机器密钥还是出于安全原因而发布的?请注意,您不能只在其中粘贴任何值:blogs.msdn.com/b/amb/archive/2012/07/31/…
  • 我不确定你是否也读过这个:stackoverflow.com/questions/10555000/…。 (可能的原因不止一个,也许其中一个答案可以解决您的问题)
  • @NightOwl888 这不是我的机器密钥,仅用于示例目的。
  • @helix 我已经阅读了那篇文章,但我在其中找不到解决方案。

标签: c# asp.net sql-server session


【解决方案1】:

我发现了问题。

问题是我(愚蠢地)试图在具有不同主机名的两个应用程序之间共享会话。通过这种方式,SessionID 被正确存储在 SQL Server 中,但是,虽然其中一个应用程序能够生成 SessionID 并将其存储在 cookie 中,但另一个应用程序由于域不同而无法读取此类 cookie。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 2012-12-22
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多