2

私はcodeigniterを使用しています。セッションに奇妙な問題があります。ユーザーがログインして新しいページにリダイレクトするときにセッションを設定しました。セッションが設定されている場合と設定されていない場合があります。sess_use_database変数TRUEおよびFALSEを使用してcodeigniterセッションとネイティブセッションを使用してみました。何が起こっているのかわかりません。

構成ファイルは次のようになります。

$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 7200;
4

5 に答える 5

2

セッション データがデータベースで利用可能な場合、ユーザーの Cookie で有効なセッションが見つかるたびに、データベース クエリが実行されて一致します。セッション ID が一致しない場合、セッションは破棄されます。セッション ID は更新できません。新しいセッションが作成されたときにのみ生成できます。

セッションを保存するには、まずこの目的のためにデータベース テーブルを作成する必要があります。

DB に作成します。

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
    session_id varchar(40) DEFAULT '0' NOT NULL,
    ip_address varchar(16) 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['sess_use_database']    = TRUE;

より安全で問題なく動作するため、セッションをデータベースに保存することを好みます。

于 2012-05-17T09:03:29.580 に答える
0

同じ問題があり、私が見つけたもの

    $config['sess_encrypt_cookie']  = TRUE;
    $config['sess_use_database']    = TRUE;

セッション テーブルに 2 つのレコードを挿入します。最初のレコードにはデータが含まれ、2 番目のレコードには何も含まれていないため、セッション データにアクセスできません。あなたが変わるとき

    $config['sess_encrypt_cookie']  = FALSE;

false に設定すると、すべてのデータを含むセッション テーブルに 1 つのレコードのみが挿入され、すべてが正しく処理されます :)

于 2013-06-16T09:29:02.593 に答える
0

試す$config['sess_match_useragent'] = FALSE;

セッションとリダイレクトで同じ問題が発生しており、cms をハッキングして原因を突き止めました。config.php での設定がうまくいきました。

于 2015-03-13T16:31:01.750 に答える
0

sess_cookie の設定はどこにありますか? 私はそこにそれを見ませんか?

$config['sess_cookie_name']     = 'cookiename';
$config['sess_expiration']      = 7200;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = TRUE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 7200;

選択した Cookie 名にアンダースコアが含まれていないことを確認してください。すなわち:

$config['sess_cookie_name'] = 'mycookie';   // good
$config['sess_cookie_name'] = 'my_cookie';   // bad
于 2012-04-11T00:07:01.053 に答える
0

想定どおりに更新されておらず、ページリクエストごとに新しいものを作成していると思います。(一般的な Codeigniter の設定の問題)

ここに私の提案があります:

Application/Config/config.php ファイルを再確認して、メイン ディレクトリでサイトをホストしている場合、セッション ドメインの一部が次のようになっていることを確認します。

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "yourdomain.com";
$config['cookie_path']  = "var/sessions/";
$config['cookie_secure']    = FALSE;

サブディレクトリでサイトをホストする場合は、次のようになります。

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "yourdomain.com";
$config['cookie_path']  = "siteSubDirectory/var/sessions/";
$config['cookie_secure']    = FALSE;

また、2 つのディレクトリのアクセス許可を 755 程度に修正して、書き込み可能であることを確認してください。データベース セッションを有効にすることを強くお勧めします。これはより安全であり、セッション テーブルをチェックすることで実際の問題を見つけるのに役立ちます。幸運を :)

于 2013-06-23T00:53:55.940 に答える