.NET TIPS

[ASP.NET]クッキーをサポートしないクライアントでセッション機能を利用するには?

山田 祥寛
2004/07/30

 ASP.NETのセッション管理機構は、デフォルトでは、セッションIDの授受にクッキーを利用する。サーバはセッション開始時(ユーザーがWebページへのアクセスを開始したとき)に、クライアントに対して120bitで構成される任意のセッションIDをクッキーとして発行する。クライアントは、リクエストの都度、このセッションIDが格納されたクッキーをサーバに送信することで、サーバはユーザーごとにセッションを識別することができるというわけだ。

 しかし、携帯端末など一部のクライアントでは、ブラウザがクッキー機能を持っていない場合が多い。また、クッキーが利用可能なブラウザでも、ユーザーの判断でクッキーが無効に設定されているようなケースもあるだろう。このような場合には、ASP.NETのセッション機能を利用することができないのだろうか。

 否。このような環境下でもセッション機能を利用できるように、ASP.NETではクッキーレス・セッションと呼ばれる機能を提供している。クッキーレス・セッションとは、その名のとおり、クッキーを経由しないでもセッションIDを授受できる仕組みのことだ。

 クッキーレス・セッションを利用するための手続きはごく単純だ。web.configの<sessionState>要素を以下のように設定するだけでよい。なお、<sessionState>要素は、仮想ディレクトリ直下のweb.configでしか設定できない点に注意すること。

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
  <system.web>
    <sessionState cookieless="true" />
  </system.web>
</configuration>
クッキーレス・セッションを利用するための手続き(web.config)
クッキーレス・セッションを利用するには、web.configの<sessionState>要素のcookieless属性に"true"を設定する。

 この状態で、ASP.NETアプリケーション内の任意のページの任意のリンクから別ページにアクセスしてみよう。例えば、ページ内に次のようなリンクがあるとする。

<a href="index.aspx">こちらへリンク</a>

 このような場合、このリンクをクリックすると、ブラウザのアドレス欄に以下のようなURLが示されているのが確認できるはずだ。

http://localhost/netIns/(1r3hm345osrrlq45ldvvjy55)/index.aspx

 カッコ内のデータがセッションIDを表す。ASP.NETにおいては、このようにURL文字列内にセッションIDを自動セットすることで、クッキー非対応のクライアントでもセッション機能を利用できるようになる。

 ただし、クッキーレス・セッションにはセキュリティ上の問題がある。というのも、クッキーレス・セッションを利用した場合、(当たり前の話であるが)セッションIDが一般ユーザーの目に直接さらされることになる。つまり、URLさえ分かってしまえば、第三者による「なりすまし」も可能であるということだ。

 ただし、このクッキーレス・セッションの脆弱性の問題は、クッキー経由でセッションIDの受け渡しを行った場合でもさほど事情は変わらない。ネットワークをモニタすることで、クッキーの内容などは簡単に盗聴できてしまうからだ。ただ、URLの方が「なりすまし」も「盗聴」も簡単であるという意味で、より危険であるといえる。しょせんは相対的なものといってしまえばそれまでだが、安全性がより重視される局面で、無用にクッキーレス・セッションを採用するべきではない(安全性を最大限に確保したいならば、クッキーによるセッション管理を採用したうえで、通信路をSSLで保護するのがより望ましいだろう)。End of Article

カテゴリ:Webフォーム 処理対象:セッション管理
使用キーワード:<sessionState>要素
 
この記事と関連性の高い別の.NET TIPS
クッキーを使ってWebページを取得するには?
[ASP.NET]セッション情報をSQL Server上で管理するには?
[ASP.NET]SQL Serverモードのセッション管理で情報を永続化するには?
[ASP.NET]セッション情報を外部プロセスで管理するには?
[ASP.NET]フォーム認証後に強制的に先頭ページへ誘導するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間