0

Codeigniter で簡単な認証プロセスを書きましたが、問題があります。

何らかの理由で、ユーザーがサイトを探索しているときに、セッションが混乱し、別のランダムなユーザーになりすます。

私は単に行うだけです:

$this->session->set_userdata('logged_in', TRUE);  
$this->session->set_userdata('id', $account->id);

ログに記録されたユーザーのIDを取得します $logged_id = $this->session->userdata('id');

セッションをDBのci_sessionsテーブルに保存し
、構成ファイルにはデフォルトが含まれています:

$config['sess_cookie_name']     = 'ci_session';  
$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']  = 300;

セッションを台無しにして、それらから異なる ID を取得する可能性があるのは何ですか?

4

2 に答える 2

1

遅い答えですが、誰かに役立つかもしれません。User-Agent の列が小さすぎるため、この問題が一度発生しました (その後、文字列が切り捨てられ、CodeIgniter がクライアントが異なると考えてセッション ID を再作成していました)。CI に記載されているスキーマ テーブルを必ず使用してください。

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) 符号なし DEFAULT 0 NOT NULL,
    user_data テキスト NOT NULL,
    主キー (session_id)、
    KEY `last_activity_idx` (`last_activity`)
);
于 2013-06-14T14:22:23.473 に答える
0

本当に奇妙に聞こえます。コードと構成は問題ないようです。ユーザーのログイン時にセッションを正しく破棄/初期化するかどうかを確認してください:

$this->CI->session->sess_destroy();
$this->CI->session->sess_create();

次に、MySQL ci_sessions テーブルを見て、現在のユーザーの 'session_id' を示す問題をデバッグしてみてください。正しいですか? 解決しない場合は、使用しているコードをさらに投稿してください。

于 2012-07-29T19:21:06.893 に答える