我试图从不同服务器上的多个应用程序访问存储在SQL Server中的共享会话。
我已经读过这个使用ASP的跨应用程序共享会话。. NET会话状态服务,但我没有运气。
我是这样设置网页的。两个应用程序的配置:
<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
存储过程,以克服应用程序名称的限制。这样,我的SessionIDs共享相同的后缀。
ASPStateTempSessions
表中仍然有2个不同的记录,具有不同的SessionIDs。下面是一个例子:
3nn53mh3j0vf3mrravuda11o9c8d4bee
oljchatkqzcje1ae1b3n2pst9c8d4bee
任何想法都会很感激!
编辑1
我尝试在一个标签上同时使用Chrome和IE。
我发现问题了。
问题是我(愚蠢地)试图在两个具有不同主机名的应用程序之间共享会话。通过这种方式,SessionID被正确地存储在SQL Server中,但是,当其中一个应用程序能够在cookie中生成和存储SessionID时,由于不同的域,另一个应用程序无法读取这样的cookie。