[Gauche-devel-jp] Re: www.cgi-session

Back to archive index

yamada yamad****@tir*****
2004年 9月 3日 (金) 10:17:22 JST


山田です。

> ちなみに、既存のセッション管理の仕組みでは、次のような
> 問題はどんなふうにハンドリングされているのでしょうか:
> 
> * 「Backボタン」問題:sessionオブジェクトへの操作が
>   破壊的である場合、ユーザがBackボタンで操作前の画面に
>   戻った時に、正しく状態が巻き戻せない
> * 「Clone」問題:操作の途中で、ユーザがそのurlを別画面で
>   開いたりして、双方で別々の操作を続けた場合、cookieだけに
>   よるセッション管理では、両方の操作を別のものとして追うことが
>   できない。

これは、Kahuaのセッションや、
えんどうさん紹介のtransaction tokenのように、
ブラウザからアクセスしたステート毎の状態を保持するような
セッションの実装の仕方を行わないと、回避できないと思いますので、
自分は、
- セッションは一時的な値を保存する用途には使わず、ユーザid等の
  恒久的な値のみを保存し、ユーザの特定等にのみ使用する
という考えで使っていました。
(で、自分の作っていたものも、そういう「簡単な」セッションです)
(ただ、この場合でもログイン/ログアウト等の動作で状態が遷移してしまうので、
  ログイン中にページを二枚開いて片方でログアウトすると、
  上記の問題は発生してしまいますが…‥)

> * Expiration:永続プロセスの無いcgiの場合、たまってゆく
>   永続セッションオブジェクトをどういうタイミングでexpireすべきか

自分は、cronで定期的に、古いセッションを削除するスクリプトを
動かすようにしていました。
cgiのみで行うなら、一定回数実行毎?に、別プロセスとして
古いセッション削除部分を起動またはforkするようにするのが
いいような気がします。
(STDIN, STDOUT等を元プロセスと切り離しておく必要があったりとか、
  ちょっと面倒な事があるような気もしますけど)
(あと、古セッション削除スクリプトを起動するかどうかの判定も、
  毎回起動する普通のCGIで真面目にやるのは面倒そうです。
  適当でいいなら乱数とかでいいのかな)
(ただ、この部分をモジュールとしてどう提供するのが良いのかは、
  ちょっと思い付きません…‥)

あまり参考にならなさそうですが、とりあえず、
「簡単な」セッションと、
「ステート毎の状態を保持できる」セッションは別物として、
両方あってもいい気はします。





Gauche-devel-jp メーリングリストの案内
Back to archive index