ブラウザのタブごとにセッション状態を維持したいと思います。
ASP.NETでこれを行うのは簡単ですか?
例:ユーザーがFirefoxでCtrl-Tを5回押し、各タブでサイトにアクセスします。サーバーで各タブに独自のセッション状態を持たせたい
URLを乱雑にすることなく1人のユーザーのマルチタブセッション状態を促進するには、次の手順を実行します。
フォームのロード関数に、次を含めます。
If Not IsPostback Then
'Generate a new PageiD'
ViewState("_PageID") = (New Random()).Next().ToString()
End If
セッション状態に何かを保存するときは、PageIDを含めます。
Session(ViewState("_PageID").ToString() & "CheckBoxes") = D
注:
<configuration>
<system.web>
<sessionState cookieless="true"
regenerateExpiredSessionId="true" />
</system.web>
</configuration>
http://msdn.Microsoft.com/en-us/library/ms178581.aspx
この場合、各タブは一意のIDを取得し、別の訪問者のように見えます。
Brian Webster 's answerを使用すると、XMLHttpRequestsに問題が見つかりました。 XMLHttpRequestsはIsPostback
フラグをtrueに設定しなかったため、リクエストは新しいリクエストのように見え、最終的にそのリクエストの新しいセッション状態を持つことになりました。この問題を解決するために、ViewState("_PageID")
の値もチェックしました
そのため、私のコードはC#で次のようになります。
protected dynamic sessionVar; //a copy of the session variable
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack && ViewState["_PageID"] == null)
{
ViewState["_PageID"] = (new Random()).Next().ToString();
Session[ViewState["_PageID"] + "sessionVar"] = initSessionVar(); //this function should initialize the session variable
}
sessionVar = Session[ViewState["_PageID"] + "sessionVar"];
//...
}