Webの世界でセッションと言えば『ブラウザからページを表示してブラウザを閉じるまでの間』『訪問』という答えを聞きます。
Webマーケティングが注目されてから言われているように感じる。
しかし、セッションは、場所・人によって意味がちがいます。改めてセッションの意味を考えます。ついでに関係の深いクッキーについても説明します。
セッションは場所・人によって意味がちがう
ブラウザからページを表示してブラウザを閉じるまでの間
訪問
Webの知識のない人にセッションを説明するとき、こう説明する人が多くなっている気がします。
ぼくも同じように説明しています。でも『セッションの意味はこれだ!』と断定されると困ってしまいます。
『訪問』がそうですが、本来の意味と全くちがいます。訪問は『session』ではなく『visit』ですよね?
『セッション = 訪問』はWebマーケティング用語?
これは、Webマーケティングが注目されてから広がったように思います。
Googleアナリティクスなどウェブアクセス解析を勉強した人はこの意味で使っていないでしょうか?
セッションの本来の意味はちがいます。この表現は『遠からず近からず、やっぱり遠い』といったところ。
とくに、Webの仕事をしているシステムエンジニア・プログラマには通用しません。彼らは本来のセッションの意味で使うからです。
通用するのは、Webの人でも『Webマーケター』『Webアナリスト』『Webコンサル』ぐらいでしょう。少なくとも『誰にでも通用するWeb用語』ではありません。
ここでは、『本当の意味』でのセッションを説明します。技術的なこと、専門用語はなるべく使わないで進めます。
セッションの英単語の意味
sessionの英単語は、
何かがはじまっているようす
という意味です。国会の開会、裁判所の開廷などで使われます。
音楽業界で『セッションする』といいますが、『本来なら一緒にやるはずのない、1回限りの希少なことがはじまる』ところからきています。
Webのセッションとは?
Webのはなしに戻しましょう。Webのセッションは『ブラウザからの訪問』にかぎらず、
なにかの始まりから終わりのあいだ
の処理のまとまりのことです。
Webのしくみを知っているプログラマ・システムエンジニアは、セッションと聞くと
始まりから終わりまでなにかの情報を保持しつづける
という条件が頭に浮かびます。彼らはセッションを、
それぞれ独立した処理に共有情報をもたせて、処理につながりをつくる
と解釈します。具体的なセッション機能を見てみましょう。
ログイン機能
ログイン機能でログインすると、
- ボタンを押してログアウト。
- ブラウザを終了してログアウト。
- ブラウザを終了してもある一定時間は維持しつづけてその後ログアウト。
など、ログアウトするまでログイン情報は維持されます。
その間にはページの遷移もあればブラウザの終了・再開もあります。あたりまえに思うかもしれませんが、これはセッションを使わなないとできません。
Webのhttp通信ではページを表示すると処理は終了します。ページ遷移に処理のつながりはありません。
Webサーバーから見ると、ページ遷移とブラウザを閉じて開くにちがいはありません。ブラウザからリクエストを1件受信するだけです。
1ページ表示は1処理で独立しています。互いに干渉しません。
ページのボタンでも同じ。操作感でつながっているように感じるが、クリックする前に処理は終わっていて、クリックすると新しい処理が始まる。
Webの処理は、
開始 -> 終了 -> 開始 -> 終了 -> ...
のくり返しです。
ログイン機能がどれだけセッションに支えられているか分かるでしょう。セッションがなければ処理の連続性・継続性は維持できません。
ショッピングサイトのカート機能
ショッピングサイトのカート機能も同じです。カートに入れた商品は、キャンセルするか、商品を購入しないかぎり何日でも残ってますよね?
これもセッションによって実現されています。
- Webは1ページ表示で1処理。
- Webサーバーから見るとページ遷移とブラウザの再起動に違いはない。
- Webの処理は、『開始』→『終了』→『開始』→『終了』→...の繰り返し。
セッションは、独立した個々の処理に情報を共有させて、連動した処理のまとまりを作ること。
セッションは単位ではなく機能
いまではセッションを単位のように使いますが、本来は機能です。もともと機能なので、セッションといっても場所・人によって意味は変わります。
Webの世界にいると、はなしの前後でなんとなく判断できてくるのですが、ほかと区別して、
ログイン(の)セッション
カート(の)セッション
と呼んだりします。機能だからいえる表現ですね?
これは決して単位としてのセッションを否定していません。むしろこちらのほうが多く使われるでしょう。
複数の独立した処理をひとまとめにしたものを1セッションといいます。1袋みたいなものです。
セッションタイムアウトとは何か?
セッションは、独立した処理をひとまとめにする特長から、タイムアウトの機能がついています。
セッションタイムアウト
といいます。
セッションは、内部でいくつもの処理が独立して開始・終了をくり返すので、セッションを始めたら必ず終わらせることがむずかしいです。
内部の処理はそれぞれ独立しているので、ひとつひとつの処理は、自分の処理が終わったあとに別の処理が始まるのか分かりません。
なので、内部の処理は、処理の最後がセッションの終わりなのかも分かりません。
そこでセッションは、セッションの終わりの条件を決めて、セッションが始まってから放置されないようにセッションタイムアウトを設定します。
これで、ぜんぶの処理がセッションを終わらせなくても、最後は時間切れで確実に終わります。
ネットバンキングはログアウトボタンを用意します。それ以外はログインタイムアウトで終わるようにしています。ログインタイムアウトがセッションタイムアウトです。
ログアウトボタンを押さずにブラウザを閉じて、後日ブラウザからページを表示すると、
前回のログインから一定時間が過ぎたのでタイムアウトしました。
お手数ですが再度ログインしてください。
と表示されますよね?
これがセッションタイムアウトです。
ネットバンキングでは、ブラウザを閉じなくても、ちょっと席を外すだけで起きるほど設定時間が短いです。
何も作業をしないのに表示しっぱなしはセキュリティ上危ないから。
お金がからんでくるところは厳しくなっています。
クッキー(Cookie)について
セッションを語るうえでクッキーは外せません。
クッキーは、Webサーバーにあるコンテンツがブラウザに情報を保存するために作成するファイルのことです。
セッションは、いくつもの処理の間で情報を共有します。ページを見る側(ブラウザ)で情報を保存してほしいこともあります。その保存先がクッキー。
ログイン状態の保存
ログイン画面にある『ログイン状態を保存する』のチェックボックスを見かけますね?
これにチェックすると、クッキーにログイン情報が保存されます。
一般的には、数週間から数か月の長いタイムアウト時間が設けられ、ログアウトするかタイムアウトにならないかぎり、クッキーにログイン情報は残りつづけます。
ブラウザでサイトページを開いたら、クッキーの情報から自動的にログイン作業を行ない、ユーザーのログイン作業を省略します。
ショッピングサイトのカート
ショッピングサイトのカートの中身は、ブラウザを閉じても、そのサイトでログインしていなくても、別の日にサイトのカートを見ると前回の情報が表示されます。
これも、クッキーにカート情報が保存されています。
ブラウザでサイトページを開いたら、クッキーからカート情報を取りだし、カートの中身を復元します。
クッキーに保存する情報は、ログイン情報そのものや、カート情報そのものではありません。復元できるキーを保存するのが一般的です。
以前は情報そのものだったのですが、セキュリティ上マズイということで、その方法はなくなっています。
現在は、ブラウザとWebサーバーだけが共有する暗号化されたものや、ワンタイムパスワードなどがクッキーに保存されます。
それまでは、クッキーを盗んでファイルを開けば、中身を見ることができました。
しかしいまは、暗号化されて意味不明のものだったり、ワンタイムパスワードなので、盗んで悪用するときにはすでに意味のないものだったりします。
なので、クッキーを盗んだだけでは意味がありません。悪いことをするには、もうひとつ手間をかける必要があるのでセキュリティは上がっています。
しかし、時間稼ぎのところがあるので100%安心ではありません。
最後に
セッションは『ブラウザでページを開いてから閉じるまでの間』以外にたくさんあることがわかると思います。
少なくとも『訪問』ではないことはたしかでしょう。なんとなく『訪問』になったいきさつは想像できます。
ウェブアクセス解析では、訪問、訪問者数、訪問時間という言葉があります。
訪問時間は、訪問者がページを閲覧した時間の総和
訪問は、ページを閲覧し始めてから最後のページを離脱するまで
(ブラウザでページを開いてからブラウザを閉じるまで)
ある時期を境にセッションと言いはじめた(Googleアナリティクス?)
セッションは、まえは『訪問』と呼ばれたもの
中身は変わらず呼び方が変わっただけなので、『セッションは訪問』が通用した
という感じだと思います。
この言葉の意味のビミョーなすれ違いは、Googleアナリティクスのセッション継続時間の不正確さ問題に表れています。
問題の本質は『セッション継続時間』=『訪問時間』だと思っているところです。
セッションを本当の意味でとらえる人は、
そもそもセッションは終わりが不確実だから、時間を計測するのはムリがあるよね?
で終わりです。セッション継続時間と訪問時間はちがうものと考えます。
ただ、その無理をどうにかしようとするGoogleの技術者たちを尊敬します。とんでもなく頭がいいので、うまいことできてるんでしょうね?
コメント