[Ethna]携帯サイトでのIPアドレスチェックを無効にする方法 (_validateRemoteAddr)
検索するとよく見かけるのが、子クラス側で_validateRemoteAddrを丸ごとオーバーライドしてtrueを返す方法。
- http://se-suganuma.blogspot.com/2008/09/ethna.html
- http://blog.mynet.co.jp/hirashima/2008/04/mobile_web_php_ethna_session_2.html
- http://www.independence-sys.com/weblog/item/153
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チェックする・しないを簡単に変更することができます。
カテゴリ:
Ethna