[Ethna]携帯サイトでのIPアドレスチェックを無効にする方法 (_validateRemoteAddr)


検索するとよく見かけるのが、子クラス側で_validateRemoteAddrを丸ごとオーバーライドしてtrueを返す方法。

    function _validateRemoteAddr($src_ip, $dst_ip)
    {
        return true;
    }

これでももちろん動くのだけど、設計的に微妙な感じします。
validateメソッドが常にtrueを返すということは、バリデーションしてないわけです。
validateという名前のメソッドがバリデーションしない、つまりメソッド名と挙動が一致していない。

こういうのはやはりフレームワーク側で気をきかせて欲しいところです。

解決方法

というわけでパッチを書いてみました。
diff --git a/class/Session.php b/class/Session.php
index 06818ef..4c11666 100644
--- a/class/Session.php
+++ b/class/Session.php
@@ -48,6 +48,9 @@ class Ethna_Session

+    /** @protected    bool  IPアドレスの範囲チェックをするかどうか */
+    protected $validateRemoteAddr = false;
+
     /**#@-*/

     /**
@@ -140,6 +143,11 @@ class Ethna_Session
             return false;
         }

+        //do IP check or not
+        if (!$this->validateRemoteAddr) {
+            return true;
+        }
+
         // check remote address
         if (!isset($_SESSION['REMOTE_ADDR'])
             || $this->_validateRemoteAddr($_SESSION['REMOTE_ADDR'],

こうすれば、子クラス側で、
    protected $validateRemoteAddr = false;
IPチェックする・しないを簡単に変更することができます。
カテゴリ: