認証が必要な携帯サイトでログイン後ユーザーにセッション($_SESSION['id'])を渡し、このセッションが切れたらログアウトするという設定にしています。
以前はDocomo・AU・Softbankの3キャリアで問題なく利用できていたのですが、サーバー移転を行なったところDocomoのケータイでSESSIONを使うことができなくなってしまいました。
//ログアウト処理
if(trim($_SESSION['id']) == ''){
header("location:logout.php");
exit;
}
以前のサーバーでは上記のプログラムで3キャリア問題なく動作していましたが、新サーバーではSoftbank・AUでは動作するのですが、Docomoの古いキャリアだとセッションが使えないみたいで、ログイン処理後、$_SESSION['id']が空となり自動で上記のログアウト処理に引っかかってしまいます。
認証後はPHPSESSIDも持ち歩いているのですが、DBにアクセスする際の会員ID(($_SESSION['id'])がどうしても必要なためDocomoでどうにかセッションが利用できないお伺いしたく質問をさせて頂きました。
php.iniの設定などで修正する方法等が御座いましたらご教授頂けたら幸いです。
大半のガラケーはCookieに対応していない。
通常のサーバーは初期設定でセッションIDをクッキーで引き回すため、ガラケーでセッション管理できない。
対応としては、CookieではなくURLにセッションIDを埋め込めばいい、つまり$_GET変数としてセッションIDを引き回す。
http://www.php.net/manual/ja/session.configuration.php#ini.session.use-cookies
use_cookiesをOFFにすればいい。その他細かい設定やコードサンプルは「php use_cookies ケータイ」などでぐぐればたくさん出てくる。恐らくsession.use_only_cookiesもoffにする必要がある。
デフォルトでoffになっているのは、GET変数によるセッション引き回しはセキュリティ面で弱いから。PCサイトも並行して運用しているのであれば、そちらはクッキーでセッションを引き回すようにした方がいい。
ケータイだけであれば…弱いのは事実だが、業界的にも一般的慣習だし、仕方ない、という所。端末固有IDなどでセッションを実装する、という方法もあるが(端末IDは詐称不可能な事が多いので安全性が高い)、これはこれで別のセキュリティ上の問題があり、一長一短。
ご回答ありがとう御座いました。
以前のサーバーと新サーバーのphpinfoを比較したところ「session.use_only_cookies」が新サーバーではONになっていたためOFFにしたところ問題なく動作致しました。
ご回答大変感謝致します。