codeigniter version 3.0.6 on PHP 5.6を使用していますが、正常に動作します。しかし、PHP 7.1で同じプロジェクトを実行すると、codeigniterセッションが機能しません。以下のようにセッションを設定します
$login_session = $this->session->set_userdata("user_session",$session_data);
$ login_sessionを印刷すると、PHP 7
最近、私のphpバージョンを5.6から7.1にアップグレードすることで同じ問題に直面しました。私の開発環境は、php7.1.4を使用したXAMPP(Apache + MariaDB)です。
以下の手順に従ってください。
1)system/libraries/Session/Session.phpに移動します
2)session_start()に//を追加してコメントします。
3)312-315の周りの行に移動して、セキュリティが重要であると表示し、次の行をコメントアウトします。
ini_set('session.use_trans_sid', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 4);
4)次に、メインのindex.php(ルートindex.php)に移動します
5)一度にsession_start()を追加します。
わたしにはできる。
私はこれらの手順に従うことでこれを乗り越えることができました。
1)_system/libraries/Session/Session.php
_に移動します
2)//を追加して、session_start()
Comment session_start()
を検索します。
3)312前後の行に移動して(または_Security is king
_を検索して)すべてのini_set()
をコメントアウトします
_ini_set('session.use_trans_sid', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 4);
_
4)次に、メインのindex.php(ルートindex.php)に移動します
5)session_start()
を上部に追加します。
6)session_start()
の下に_Session.php
_でコメントされている次の行を追加します
_ini_set('session.use_trans_sid', 0);
ini_set('session.use_strict_mode', 1);
ini_set('session.use_cookies', 1);
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_function', 1);
ini_set('session.hash_bits_per_character', 4);
_
それでおしまい。
問題は以前のバージョンのCodeigniter 3にあり、これは既にWebサイトで報告されているバグであることがわかりました。このバグは修正されており、Codeigniter 3の最新バージョンではこの問題は発生しません。
すでに障害のあるバージョンにいる場合は、システムフォルダーを最新バージョンのものに置き換えることを検討してください。
この答えを見つけました こちら
セッションIDはPHP 7.1では異なり、正規表現のチェックに合格しません。
簡単な修正:system/libraries/Session/Session.php arround line 133
OR ! preg_match('/^[0-9a-f]{40}$/', $_COOKIE[$this->_config['cookie_name']])
「{40} $」を削除
OR ! preg_match('/^[0-9a-f]/', $_COOKIE[$this->_config['cookie_name']])
問題は、正規表現が一致しないため、セッションIDがCookieから削除されることです。したがって、セッションIDは常に更新されます。
これにより、正規表現が修正され、「unset($ _ COOKIE [$ this-> _ config ['cookie_name']]);」行が実行されないようにできます。
それは私のために完全に機能します!
参考までに。自分で修正してから見つけてください。 https://github.com/bcit-ci/CodeIgniter/issues/48
セッション保存パスが設定されていることを確認してください
$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = APPPATH . 'cache/session/';
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
フォルダーのアクセス許可を設定0700
必要に応じてセッションを自動ロードする
$autoload['libraries'] = array('session');
セッションの設定方法
$session = array('islogged' => true, 'user_id' => '1');
$this->session->set_userdata($session);
ユーザーデータを1セット取得する例
echo $this->session->userdata('user_id');
if (!$this->session->userdata('islogged')) {
redirect('logout');
}
次の手順を提案します。
これにより、問題がシームレスに解決され、時間を節約できるだけでなく、アプリを台無しにする潜在的なリスクも軽減されます。
Codeigniterを最新バージョンにアップグレードします。問題は解決されます。
問題はPHPバージョンにあり、PHP 7.1は実際には安定しておらず、セッションに多くの問題があります。 PHPバージョンを7.0に変更すると、セッションが自動的に機能し始めます。