セッション変数の排他制御で不具合
- Dominant language
- PHP
- Stars
- 92
- Forks
- 97
- Avg merge
- 4d 2h
- Merged PRs (30d)
- 9
Description
### 概要(Overview)
不具合の内容は http://svn.ec-cube.net/open_trac/ticket/571 に記載の通り。
過去にこの問題に取り組んだ際は、PHP が排他制御する前提で考えていた。しかし、複数サーバー構成だと、そもそも PHP がカバーできる性質ではないと気付き、EC-CUBE 側が対処すべき不具合と考えを改めた。
(前提として、dtb_session に保存している理由は、APサーバー複数構成時のセッション情報の共有と理解している。他にもあると、それを考慮して再考が必要かも。)
### APサーバー構成パターン毎に整理
#### 単一サーバー
通常は、dtb_session を使わず、ファイル保存で足りる。それにより、PHP の標準機能である flock による排他制御が適用される。しかし、保存先がデフォルトのままだと、別のアプリケーションがセッション情報を読み書きし得て、それは危険かも。data/ 配下に保存する対応が良さそうに思う。
#### 複数サーバーで、LB でクライアントの振り分けを固定している
基本的には「単一サーバー」と同じ。
加えて、data/ が NFS だったりすると、flock で問題を生じるかもしれないので、保存先を任意にも設定できる仕組みは必要そう。
#### 複数サーバーで、LB でクライアントの振り分けを固定していない
従来から、dtb_session に保存する価値が大きかったのはこのパターンに限られる認識。しかし、EC-CUBE が排他制御まで面倒をみないと、冒頭の問題が発生する (現況は、みていないので、単一サーバーでも不具合を生じている)。dtb_session の読み書きを行う DB コネクションを別に設けて、行ロックすれば良いか。
### 改善案
- セッションの保存先を ファイル・DB で選択できるようにする。
- パラメーターだと、タイミング的に手遅れな気がするので(要確認)、data/config/config.php か。
- session.save_path が設定されてない場合、セッションファイルの保存先を data/session/ とする。(data/ 配下で flock できない場合、session.save_path でできる場所を指定するか、DB 保存を利用する。)
- dtb_session の読み書きを行う DB コネクションを分け、行ロックする。
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.