0

因为我是新手,所以我可能会使用错误的方法,但我的问题是:

我从第三方收到了关于某个操作的异步帖子。在那篇文章中,我得到了一个用户 sessionId。如何将会话变量保存到该 ID?

如果我这样做:

manager.SaveSessionID(System.Web.HttpContext.Current, sessionId, out redirected, out isAdded);


Session["test"] = "AAA";

似乎 Session["test"] 被保存到旧会话中。

更新:

这正在做:

1)我确实向第三方发布。2)我得到一个网址,我将用户重定向到该网址。3) 用户在第三方网站上按“确定”后,我会收到来自第三方网站对某项操作的回发。在此操作中,我尝试保存会话变量。但我看到 sessionId 是不同的。然而,我得到了正确的 sessionId 作为回发变量。

谢谢

4

2 回答 2

2

SaveSessionID不应该从应用程序代码中调用,这可能是您得到意外结果的原因。

我质疑为什么您首先要尝试手动设置 ASP.NET 会话 ID(听起来像是劫持......)?在活动会话中简单地跟踪您的第 3 方会话标识符会更安全,例如

Session["3rdPartySessionId"] = sessionId;

出于某种原因,当我收到回发时,我HttpContext.Session.SessionID的与用户 cookie 不同

这是因为您使用的是基于 cookie 的会话状态。从文档

使用基于 cookie 的会话状态时,ASP.NET 在使用 Session 对象之前不会为会话数据分配存储空间。因此,每次页面请求都会生成一个新的会话 ID,直到访问会话对象

您发布到第 3 方 API 的请求与您处理回调的请求不同,因此为了维持相同的会话 ID,您需要在发送第一个请求之前初始化会话。通常,在您的应用程序中全局解决此问题的最佳方法是在 Global.asax 中初始化您的会话,即

protected void Session_Start(Object sender, EventArgs e) 
{
    // initialize the session object with "something"
    Session["Init"] = 0;
}
于 2013-11-11T08:55:13.647 回答
0

好像您使用 SessionIDManager.SaveSessionID 不正确:

" 此方法不打算从应用程序代码中调用。

SaveSessionID 方法将会话标识符存储在 URL(当使用无 cookie 会话状态时)或非过期会话 cookie 中。"

基本上你是想在别人的会话中设置变量?

于 2013-11-11T08:55:50.647 回答