C# 重新连接到ASP.NET会话

C# 重新连接到ASP.NET会话,c#,asp.net,session,C#,Asp.net,Session,我有一个ASP.NET页面,它收集一些用户信息,然后将包含url的帖子发送到第三方网站进行处理。处理后,第三方网站会将帖子发送回原始帖子中包含的url。问题在于,当新页面收到post消息时,SessionID不同,并且用户信息不在新会话中。如果我存储原始的会话ID我可以使用它连接到原始会话吗?快速回答是否。您不能重用现有会话。会话的目的是使每个访问者在多个平台(和浏览器)上都是唯一的 如果我理解正确,第三方站点将异步发布回指定的URL。如果是这种情况,则第三方请求将被分配一个新会话ID,因为它是

我有一个ASP.NET页面,它收集一些用户信息,然后将包含url的帖子发送到第三方网站进行处理。处理后,第三方网站会将帖子发送回原始帖子中包含的url。问题在于,当新页面收到post消息时,
SessionID
不同,并且用户信息不在新会话中。如果我存储原始的
会话ID
我可以使用它连接到原始会话吗?

快速回答是否。您不能重用现有会话。会话的目的是使每个访问者在多个平台(和浏览器)上都是唯一的

如果我理解正确,第三方站点将异步发布回指定的URL。如果是这种情况,则第三方请求将被分配一个新会话ID,因为它是web应用程序的新会话。我建议修改您的回拨URL以发回一些信息,然后允许您定位最初发送过来的用户信息。这可以通过只提供一个表示用户ID的querystring键来实现,或者更高级的指向web存储系统中的一个键来查找原始请求的更多详细信息。例如
http://www.mysite.com/myThirdPartyCallBack?userID=abcd12345

另一方面,如果发生以下过程。用户将表单发布到第三方站点。然后用户在第三方站点上完成一些工作,然后重定向回您的站点,这更多的是会话时间问题。如果是这种情况,那么我将检查您的会话计时,以确保它们足够长,用户可以在第三方站点上完成工作


我以前遇到过类似的情况,我使用了几种不同的解决方案

  • 一种方法类似于Nico的方法,站点要求返回一个URI,我附加了一个guid,指向数据库中的一个临时表(我不喜欢像那样将UserID放在URL中)。我的版本是:

然后,您可以在第三方重定向之前从数据库中获取输入的值

  • 第二种方法是在重定向之前将所需数据写入缓存。因为您可以将数据的生命周期设置为较短,所以这是一个简洁的解决方案,并且您不会通过URL公开任何信息。如果有必要,只需小心识别用户
为什么不从用户页面发送帖子,让用户通过简单地显示正在加载的图像来等待。。。或者,将帖子委托给其他操作,在最后,您将更新数据库,并允许用户知道发布的内容?-第一部分包含
$.post()
,第二部分包含更多的代码。在使用数据库时使用会话是错误的。会话很容易因任何原因而丢失、已过期、cookie不同、池在内存会话上重新启动等。即使您解决了它,也可能存在问题。您的第一个假设是正确的。这样做是为了让敏感用户输入的数据不会真正触动我的网站。@jac我想是这样的,最好是在回调中包含某种神秘的查询字符串参数。在这些情况下,我使用了一个散列字符串,其中包含用户信息,必须使用自定义的salt散列提供程序进行解码。我只需要在另一个页面中使用user对象几秒钟,因此缓存似乎是一个很好的解决方案。