ASP.NETでは、セッションはブラウザー用です。しかし、どうすればタブのセッションを作成できますか?
2 に答える
以下を使用します。
<configuration>
<system.web>
<sessionState cookieless="true"
regenerateExpiredSessionId="true" />
</system.web>
</configuration>
そしてMSDNからの引用:
ASP.NET は、一意のセッション ID をページの URL に自動的に挿入することで、Cookie を使用しないセッション状態を維持します。たとえば、次の URL は ASP.NET によって変更され、一意のセッション ID lit3py55t21z5v55vlm25s55 が含まれるようになりました。
http://www.example.com/(S(lit3py55t21z5v55vlm25s55))/orderform.aspx
ASP.NET がページをブラウザーに送信すると、リンクにセッション ID 値を埋め込むことによって、アプリケーション相対パスを使用するページ内のすべてのリンクが変更されます。(絶対パスのリンクは変更されません。) このように変更されたリンクをユーザーがクリックしている限り、セッション状態は維持されます。ただし、アプリケーションによって提供された URL をクライアントが書き換えた場合、ASP.NET はセッション ID を解決して、要求を既存のセッションに関連付けることができない場合があります。その場合、リクエストに対して新しいセッションが開始されます。
したがって、新しいタブの新しいセッションを開くために必要なのは、セッション識別子なしで URL を開くことだけです。
編集:
そして、他のユーザーが言及したように、この「カンフー」に注意する必要があります。ユーザーの機密情報をセッションに保存している場合は、認証 Cookie を保護してください。
EDIT2:URLでセッションキーを使用する場合、ユーザーはそれをコピーして友人に送信できることに注意してください。そして、このユーザーと彼の友人は単一のセッションを共有します (これは素晴らしい機能です! :))。これを回避するには、次のようにします。
1. onSessionStart メソッドでユーザー (ユーザーのプロファイル、データベースに保存) に関連付けを追加し、BeginRequest で確認します。
2. リファラーを確認し、リファラーが空であるか、現在のドメインと等しくない場合は、新しいセッションを作成します (セッションレス URL にリダイレクトします) (ただし、リファラーは手動で設定できることに注意してください)
3. セッション ID の生成を書き換え、それをユーザー名に関連付けますおよび ip/mac (xor など)。そして、セッションがピックアップされた段階でこれを確認します。
4. このセッション キーを現在のユーザーに対してのみ有効にするための別の方法。
セッションCookieは、ブラウザのそのインスタンスにアクセス可能な揮発性ストレージに保持されます。あなたはあなたが求めている概念をサポートするブラウザを必要とするでしょう、私の知る限りそのようなブラウザは存在しません。
ASP.NETでは、セッションCookieを使用せずにセッションを維持できます。これは本当に醜いので、お勧めしませんが、目標を達成するための方法かもしれません。