ASP.NET应用程序(实际上使用Silverlight但无关紧要)在Outlook中作为文件夹主页托管。在这个应用程序中,有一个打开弹出窗口的链接,它打开一个单独的IE窗口,而不是在Outlook中。
问题是在这种情况下,似乎ASP.NET会话丢失了。对Session服务的调用在Session和Session.Iid中没有任何区别。我怀疑Outlook与IE有不同的Cookie。
如何在Outlook中打开IE弹出窗口时保留会话?也许以某种方式通过URL传递会话ID,或者在web.config中配置它?
请注意,我不想要无Cookie会话。
答案 0 :(得分:0)
我在过去遇到过这个问题,因为Outlook中的浏览器在一个完全不同的过程中运行而且它甚至不是典型的IE环境,所以从来没有找到解决方法。如果我记得的话,我也会遇到通过身份验证的问题。
当直接在IE中完成相同的行为时,它实际上使用相同的会话打开另一个窗口。
要在Outlook中重新创建IE中的进程,只需打开IE窗口并转到您的应用程序。然后通过单击快捷方式(不从当前IE会话产生它)并将链接复制并粘贴到地址栏中来打开新的IE窗口。这基本上就是Outlook正在做的事情。
答案 1 :(得分:0)
我会尝试在Outlook的url中传递用户的ASP.NET_SessionId cookie的值,然后在IE中打开的页面上检查url上的该值并在加载之前复制响应中的ASP.NET_SessionId cookie页面(可能在会话甚至为请求加载之前的IHttpModule中)。
我不是百分之百肯定这会起作用,以防ASP.NET有一些内置的会话劫持安全措施,这会阻止你以某种方式手动复制会话cookie,但这就是我要开始的地方。