ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

類似システムの同時利用対策の誤った方法

昨日類似システムを同時利用された場合の対処方法を書きました。
ajya.hatenablog.jp

僕はこの方法で十分だと考えていましたが、入力画面を表示したときに、システム毎に異なる値を割り振るだけではなく、処理を追加するパターンを見ました。

session_start();

if ($_SESSION["uniquekey"] == "" || ($_SESSION["uniquekey"] != "" && $_SESSION["uniquekey"] != "123")) {
    header("Content-type: text/html; charset=UTF-8");

    $_SESSION = array();

    if (isset($_COOKIE[session_name()])) {
        setcookie(session_name(), "", time() - 42000, "/");
    }

    session_destroy();
}

$_SESSION["uniquekey"] = "123";

f:id:AJYA:20160119054650j:plain
photo credit: Código fuente de Windows Vista via photopin (license)

問題点

一見問題ないような気がしてしまいますが、動作させてみればすぐに正しく動作しないことがわかります。
セッションが空だったり、セッションのシステム毎に異なる値が異なった場合、if文が成立してセッションの破棄がされた後にセッション変数に値を入れています。
そのため、確認画面に遷移すると新しくセッションが開始され、セッション毎の異なる値が取得できずエラーになります。


最初の入力画面は、チェックは行わず判定用の値の設定のみが無難だと考えています。