Webアプリケーションで使うスコープって、実は足りないんじゃね? | 超キレやすいプログラマのブログ

超キレやすいプログラマのブログ

キレてキレてキレまくる

Webアプリケーションのスコープ(アプリケーション/セッション/リクエスト)って、実は足りてないんじゃないかって思った。

だってさ、昔から良くある話でさ、


「ブラウザ2つ開いて同じアプリの画面開いたけど、それぞれサーバに問い合わせにいくと同じセッションを使ってしまう。別々のセッションにしたいのに・・・」


って問題よくあるじゃない?
今じゃ別タブって表現したほうがいいのかな。

これって、セッションIDをドメイン?ごとに共有されるcookieに入れてるのが原因でしょ。
セッションIDをhiddenに入れてPOST通信のみに縛れば解決するけど、そうなると今度はドメインでセッションを共有したいときに困る。


例を挙げると、例えば、多言語化対応のショッピングサイトがあったとする。
言語は画面の右上のプルダウンで選べるイメージ。
これをブラウザ2つ立ち上げて、両方で開いたとする。

片方の画面でカートに商品を入れるとセッションに商品が登録される。
cookieにセッションIDを保存していれば、これにより、もう一方の画面でも同じ商品がカートに登録されたことになるよね。
さらにユーザは、日本語と英語での商品説明の両方を見ながら購入したいと考え、片方の画面の言語を英語に切り替えたとする。
この選択言語の情報も、わざわざ全ての画面にhiddenで持たせて持ちまわるよりも、サーバに保持した方が便利だから、この場合も現状はセッションに保持することになると思う。
しかし現状のセッションはcookieに保存されているので、日本語のままの画面も遷移を行うと英語に切り替わってしまう。


なんか例が悪い気もするけど、現状セッションに求めるニーズとしては2種類あることはご理解いただけたと思う。
(1)複数画面開いても、その全てで共通したセッションを使いたい。
(2)複数画面開くと、それぞれの画面で別のセッションを使いたい。


これを防ぐ方法は色々ある。
cookieとhiddenに別々のセッションIDを持たせて、サーバ側のセッション管理は独自に組み立てるとかも考えられる。

でもさ、
普遍的なニーズがある(多分)んだから、フレームワーク側とかそういう上位の所に解決する仕組みがあるべきやろ?って思うんだよね。


結論としては、

アプリケーション/セッション/リクエストって3つのスコープに加え、
「ウィンドウ」
ってスコープを追加


したらいいと思う。
まあ、ウィンドウって文言が適切かどうかはわからないけど(JavaScriptでwindow.openってやったときは別スコープになるようなイメージを持ってしまうから)、言ってる意味は伝わったかと思う。
そういう仕組みって既にあるんかね?あるんなら教えて欲しい。







え?そんなに言うんなら、他人を頼らず自分でフレームワーク作れって?
だって、そんなの超めんどくさいじゃん!!
(本音:作って公開しても誰にも相手にされず、偉い人にpgrされるのが怖くてガクブル)



っつうことで、誰か解決して偉い人ハート(←2つ前の記事で文句言ってたくせにいざとなると頼りっぱなし)