どうも、Codeigniter3のセッションIDがアクセスごとに変わってるっぽくてセッションが保持されないようだ。
まずは環境
CnetOS7 / PHP7.1 / Codeigniter3.1.6 / Apache / MySQL5.5
ログインできてないっぽい
Codeigniterの認証ライブラリの「Ion Auth」を使ってるけど認証できたかどうかは画面の遷移で判断できるから、UsernameとPasswordの判定はできてるっぽい。
けれど、間違っていてもログインページに戻るだけでエラーメッセージの表示がなくて気持ち悪さを感じていた。
Cookieを眺めていると、アクセスするごとに違うセッションIDになっているのに気づいた。CodeigniterのセッションID名は「ci_session」。PHPの標準のPHPSESSIONで試してみると問題なく使えることはわかった。
それと、ローカル開発環境のXAMPPだと、ci_sessionもある程度固定されていて、問題なく認証ライブラリは動作した。セキュリティ面の挙動として毎回セッションIDを変更しているわけではないみたい。
考えられる原因
タイムゾーンあたりの設定、Codeigniter3でセッションライブラリが大きく変わっている、
タイムゾーンの設定
ちゃんと動く環境があるから、こういう部分の設定の違いだろうと考えられる。
config/config.phpにタイムゾーンの設定書いてみたけど出来てないかな。あとでphp.iniで設定。
Codeigniter3のセッションライブラリ
GithubにCodeigniter2で使うならModelとControllerのファイル名の頭文字を大文字に直してねって書いてあったから、今のIon AuthはCodeigniter3対応されてるように思える。
対処方法
2017/11/20 追記ここから
結局、覚えておきたい部分はここから。
下の記事タイトルそのまんまなことですが、「PHP7.1でCodeIgniterを動かすならver3.1.2以上で」ということで。
実はこの記事は不具合とか調べててCodeigniterのバージョンアップを考えていた時に一度見ていたやつだった。
どうも、バージョン確認をするときに、ダウンロードしたての最新のCodeigniterの定義ファイルを見ていたようで、そのときは「なんだ最新じゃん」って思っていたけど、後々実際のサイトのファイルを見直してみたら、PHP7.1でちゃんと動かないとされているバージョン3.2.1以前のものだった。
結果、Codeigniterのバージョンアップをして3.1.6にしたら、セッションライブラリが正常に動作するようになりました。
ついでに、コントローラやモデル、ビューの整理をしてすっきりしましたとさ。