0

私はこれに慣れていないので、間違ったアプローチを使用する可能性がありますが、私の質問は次のとおりです。

サードパーティからアクションへの非同期投稿を受け取ります。その投稿で、ユーザーの sessionId を取得します。セッション変数をそのIDに保存するにはどうすればよいですか?

私がこれを好きなら:

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


Session["test"] = "AAA";

Session["test"] は古いセッションに保存されているようです。

アップデート:

これは行われています:

1)第三者に投稿します。2) URL を取得し、ユーザーをその URL にリダイレクトします。3)ユーザーがサードパーティのサイトで「OK」を押した後、サードパーティのサイトからアクションへのポストバックを取得します。このアクションでは、セッション変数を保存しようとします。しかし、sessionId が異なることがわかります。ただし、ポストバック変数として正しい sessionId を取得します。

ありがとうございます

4

2 に答える 2

2

SaveSessionIDはアプリケーション コードから呼び出されることは想定されていないため、予期しない結果が得られる可能性があります。

そもそもなぜ ASP.NET セッション ID を手動で設定しようとするのか疑問に思います (ハイジャックのように思えます...)。アクティブなセッションでサードパーティのセッション識別子を追跡するだけの方が安全です。

Session["3rdPartySessionId"] = sessionId;

何らかの理由でポストバックを取得するとHttpContext.Session.SessionID、ユーザーの Cookie とは異なります

これは、Cookie ベースのセッション状態を使用しているためです。ドキュメントから

Cookie ベースのセッション状態を使用する場合、ASP.NET は、Session オブジェクトが使用されるまで、セッション データ用のストレージを割り当てません。その結果、セッション オブジェクトがアクセスされるまで、ページ要求ごとに新しいセッション ID が生成されます。

サードパーティ API に POST するリクエストは、コールバックを処理するリクエストと同じではないため、同じセッション 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 メソッドは、セッション ID を URL (Cookie のないセッション状態が使用されている場合) または無期限のセッション Cookie に格納します。"

基本的に、他の誰かのセッションで変数を設定しようとしていますか?

于 2013-11-11T08:55:50.647 に答える