だってさ、昔から良くある話でさ、
「ブラウザ2つ開いて同じアプリの画面開いたけど、それぞれサーバに問い合わせにいくと同じセッションを使ってしまう。別々のセッションにしたいのに・・・」
って問題よくあるじゃない?
今じゃ別タブって表現したほうがいいのかな。
これって、セッションIDをドメイン?ごとに共有されるcookieに入れてるのが原因でしょ。
セッションIDをhiddenに入れてPOST通信のみに縛れば解決するけど、そうなると今度はドメインでセッションを共有したいときに困る。
例を挙げると、例えば、多言語化対応のショッピングサイトがあったとする。
言語は画面の右上のプルダウンで選べるイメージ。
これをブラウザ2つ立ち上げて、両方で開いたとする。
片方の画面でカートに商品を入れるとセッションに商品が登録される。
cookieにセッションIDを保存していれば、これにより、もう一方の画面でも同じ商品がカートに登録されたことになるよね。
さらにユーザは、日本語と英語での商品説明の両方を見ながら購入したいと考え、片方の画面の言語を英語に切り替えたとする。
この選択言語の情報も、わざわざ全ての画面にhiddenで持たせて持ちまわるよりも、サーバに保持した方が便利だから、この場合も現状はセッションに保持することになると思う。
しかし現状のセッションはcookieに保存されているので、日本語のままの画面も遷移を行うと英語に切り替わってしまう。
なんか例が悪い気もするけど、現状セッションに求めるニーズとしては2種類あることはご理解いただけたと思う。
(1)複数画面開いても、その全てで共通したセッションを使いたい。
(2)複数画面開くと、それぞれの画面で別のセッションを使いたい。
これを防ぐ方法は色々ある。
cookieとhiddenに別々のセッションIDを持たせて、サーバ側のセッション管理は独自に組み立てるとかも考えられる。
でもさ、
普遍的なニーズがある(多分)んだから、フレームワーク側とかそういう上位の所に解決する仕組みがあるべきやろ?って思うんだよね。
結論としては、
アプリケーション/セッション/リクエストって3つのスコープに加え、
「ウィンドウ」
ってスコープを追加
したらいいと思う。
まあ、ウィンドウって文言が適切かどうかはわからないけど(JavaScriptでwindow.openってやったときは別スコープになるようなイメージを持ってしまうから)、言ってる意味は伝わったかと思う。
そういう仕組みって既にあるんかね?あるんなら教えて欲しい。
え?そんなに言うんなら、他人を頼らず自分でフレームワーク作れって?
だって、そんなの超めんどくさいじゃん!!
(本音:作って公開しても誰にも相手にされず、偉い人にpgrされるのが怖くてガクブル)
っつうことで、誰か解決して偉い人
(←2つ前の記事で文句言ってたくせにいざとなると頼りっぱなし)