web-dev-qa-db-ja.com

Codeigniterセッションが動作していませんPHP 7

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

9
hrishi

最近、私の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()を追加します。

わたしにはできる。

28
Shafiq

私はこれらの手順に従うことでこれを乗り越えることができました。

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);
_

それでおしまい。

9
PHP Worm...

問題は以前のバージョンのCodeigniter 3にあり、これは既にWebサイトで報告されているバグであることがわかりました。このバグは修正されており、Codeigniter 3の最新バージョンではこの問題は発生しません。

すでに障害のあるバージョンにいる場合は、システムフォルダーを最新バージョンのものに置き換えることを検討してください。

この答えを見つけました こちら

6
Siddhesh

セッション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

5
Leon Lo

セッション保存パスが設定されていることを確認してください

$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');
}
3
Mr. ED

次の手順を提案します。

  1. https://www.codeigniter.com に移動し、フレームワークの最新の3.x.xバージョンをダウンロードして解凍します。
  2. 既存のアプリでシステムフォルダーのコピーを作成し、別の場所に保存してから、アプリフォルダー内のシステムフォルダーを削除します。
  3. ダウンロードしたシステムフォルダのコピーを取り、最後に削除した場所に置きます。
  4. 完了!

これにより、問題がシームレスに解決され、時間を節約できるだけでなく、アプリを台無しにする潜在的なリスクも軽減されます。

3
pimpace

Codeigniterを最新バージョンにアップグレードします。問題は解決されます。

2
Anmol Mourya

問題はPHPバージョンにあり、PHP 7.1は実際には安定しておらず、セッションに多くの問題があります。 PHPバージョンを7.0に変更すると、セッションが自動的に機能し始めます。

1
Sunday Okoi