.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
[ASP.NET]セッション情報をSQL Server上で管理するには?
クッキーを使ってWebページを取得するには?
[ASP.NET]SQL Serverモードのセッション管理で情報を永続化するには?
[ASP.NET]セッション情報を外部プロセスで管理するには?
[ASP.NET MVC]リダイレクトの前後でデータを共有するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH