9

私はcodeigniterプロジェクトでログインシステムを作成しました。これはFirefoxでは正常に機能しますが、Chromeでは機能せず、データをフェッチしてセッションに設定しますが、このコードがコントロールをadmin / dashboardにリダイレクトすると、セッションデータが再度チェックされます。セッションデータが存在しない場合、コードはユーザーを再度ログインにリダイレクトします............私のコードは以下のとおりですが、codeigniterのこのセッション/Cookieの何が問題になっているのかわかりません。

        $data = array(
             'user_id' => $user->id,
             'name' => $user->name,
             'user_type' => $user->type,
             'username' => $user->username,
             'is_logged_in' => true
        );

        $this->session->set_userdata($data);
        //echo "user ".$this->session->userdata("username"); exit;
        redirect("admin/dashboard", "location"); 

私はたくさん検索しましたが、設定ファイルの「 cookie_domain 」の変更のように、この状況では誰も機能しませんが、何も起こりませんでした...。

4

12 に答える 12

19

私もこの状況に直面し、セッションの有効期限を1日に増やすことで修正しました。

アップデート

セッションの有効期限を延長することで機能するのはなぜですか?


この問題は、ユーザーとWebサーバーの場所のタイムゾーンの違いが原因で発生します。たとえば、私はパキスタンに住んでいて、米国のタイムゾーンより10時間進んでおり、サーバーは米国にあります。パキスタン時間の2012年10月17日14:00にページをリクエストします。Webサーバーが米国にあり、セッションの有効期限が2時間に設定されているため、米国での時刻は2012年10月17日4:00で、サーバーから送信されたCookieの有効期限は2012年10月17日6:00に設定されています。これで、ブラウザはローカルPCの時刻と対話し、時刻を取得します。17/10/2012 14:00したがって、Cookieが削除されるか、要求に応じてCookieが常に更新されます。したがって、最大のタイムゾーンの違いはニュージーランドと米国の間で17時間であるため、セッションの有効期限を1日に設定するのが最善です(違いについてはよくわかりませんが、間違っている可能性があります)。だからあなたのクッキーは少なくとも7時間生き続けます

于 2012-10-16T09:04:52.647 に答える
2

経験を追加するために、Codeigniter2.1.4を使用しています。

問題:Chromeでのセッションが数分以上続かなかったか、ajaxリクエストの実行中にログアウトされました。私はいくつかのアプローチを試しました:(sess_cookie_nameを変更し、sess_expiration時間を長くしました)。

sess_encrypt_cookieをFALSEに設定すると、Chromeのログアウトの問題が修正されたことがわかりました。

$config['sess_encrypt_cookie'] = FALSE;

理由はわかりませんが、ChromeでのCookieの長さの問題である可能性があります(私が知る限り、暗号化によって文字列の長さが大幅に増加します)。

暗号化によってセキュリティがさらに強化されることは知っていますが、私が読んだ限りでは、Cookieに保存されているデータは機密ではありません。

それが役に立てば幸い!

于 2013-09-11T00:41:51.470 に答える
1

config.phpでsess_match_useragentパラメータをfalseに変更しました

$config['sess_match_useragent'] = FALSE;

そして、グーグルクロームの問題は解決されました。

于 2015-03-18T04:25:05.360 に答える
0

セッションを長期間保存していて、早期に破棄されていないことを確認しましたか?または、Firefoxとそれで動作するcodeigniterにそのようなコードがないため、セッションとCookieデータを受け入れるためのChrome設定に関係している可能性がありますChromeでは動作しません。また、「セッション」ライブラリを自動ロードしていることを確認してください。

于 2012-10-16T07:02:45.330 に答える
0

Shayan Husainiによる完璧な答え私は同じ問題を抱えていましたが、変更することで解決しました

$config['sess_expiration'] = 8600;

これは24時間で数秒、2時間で数秒でした

$config['sess_expiration'] = 7200;

私はパキスタンに住んでいて、米国のサーバーを使用しているので、この問題が発生します。

Shayanに感謝します。とても助かりました。

于 2013-01-29T10:42:01.137 に答える
0

私はで同じ問題に遭遇し、この時点で最新バージョンのCodeigniterバージョン2.1.4からのSQL構造でセッションデータベーステーブルを更新することで、最終的にそれを解決することができました。

    CREATE TABLE IF NOT EXISTS  `ci_sessions` (
         session_id varchar(40) DEFAULT '0' NOT NULL,
         ip_address varchar(45) DEFAULT '0' NOT NULL,
         user_agent varchar(120) NOT NULL,
         last_activity int(10) unsigned DEFAULT 0 NOT NULL,
         user_data text NOT NULL,
         PRIMARY KEY (session_id),
         KEY `last_activity_idx` (`last_activity`)
    );

また、config / database.phpで複数のデータベースが構成されている場合は、デフォルト構成のデータベースのセッションテーブルを使用するセッションテーブルにも注意してください。

于 2014-06-06T18:33:17.817 に答える
0

解決済み、Cookieに指定されたドメインがlocalhostの場合、CodeIgniterにはいくつかの問題があります。実際のドメインの名前構造を持つ偽のドメインをhostsファイルに設定すると、機能します。

于 2015-03-24T17:54:42.300 に答える
0

私はこれが遅い答えであることを知っています、しかしあなたがここで良い解決策を探しているならそれは次のとおりです:ログアウトコードとしてこのコードを使用してください:

$this->session->sess_destroy();

これにより、新しいセッションを保存できない主な理由であるセッション「ci_session」が確実に削除されます。お役に立てば幸いです。

于 2015-04-01T23:13:46.360 に答える
0

サーバーのPHPバージョンを確認してください。7.xが5.6に変更された場合は、機能します。

于 2019-05-15T05:57:04.330 に答える
0

$config['sess_time_to_update'] = 3;同じ問題が発生し、CodeIgniterフレームワークの/application/config/config.phpの値を変更することで問題を解決できました。

于 2020-08-08T00:37:13.040 に答える
0

私も同じ問題に直面していました。しかし、$config['cookie_path']に適切な値を設定することで修正しました。プロジェクトがドメインのサブフォルダーから実行されている場合。次に、サブフォルダ名を$config['cookie_path']の値として設定してください。

プロジェクトのURLをhttps://example.com/demo1/とすると、$config['cookie_path']は$config['cookie_path'] ='/ demo1/'のようになります。

于 2021-03-18T05:35:12.883 に答える
0

最新バージョンに更新してみてください。私はバージョン3.1.9を使用していますが、セッションに問題はありません。

https://codeigniter.com/userguide3/installation/downloads.html

于 2021-11-06T08:16:24.653 に答える