21

フレームワークとして codeigniter を使用しています。

まず、使用localhostしていますが、自分の IP アドレスに変更すると、ログイン機能が機能しなくなります。別のコントローラーにリダイレクトした後、セッションが失われることがわかりました。

これが結果ですprint_r($this->session->all_userdata());

[session_id] => 7b00fa0f8790f48d24446f9eb4e6aab2 
[ip_address] => 10.42.68.71 
[user_agent] => Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.83 Safari/537.1
[last_activity] => 1285962398 
[user_data] =>

ご覧のとおり、渡されたデータはありませんが、user_dataテスト時にリダイレクトする前に設定されました。

コントローラーを 2 つに分けます。最初の 1 つはユーザー -> ログイン関数のハンドラーであり、もう 1 つは、ユーザー コントローラーからリダイレクトするリンクのハンドラーであるプランナーです。

users.php(最初のコントローラー):

$this->load->model('users_model');
$this->load->model('mymodel');
$this->load->database();

$email = $this->input->post('email');

$pass = $this->input->post('password');

$type = $this->input->post('type');

// Authenticate the user
$userdata = $this->users_model->auth_user($email,$pass,$type);

if($userdata)
{
    $data = array('FIRSTNAME' => $userdata->FIRSTNAME, 
                  'LASTNAME' => $userdata->LASTNAME, 
                  'EMAIL' => $userdata->EMAIL,
                  'LOGIN' =>TRUE, 'TYPE' => $type);
    $this->session->set_userdata($data);
    redirect('planner/view_system','refresh');
}

planner.php(2 番目のコントローラー):

function __construct() {
    parent::__construct();

    if ( ! ($this->session->userdata('LOGIN')))
    { 
        print_r (var_dump($this->session->userdata('FIRSTNAME')));
        print_r($this->session->all_userdata());
    }
    $this->load->helper(array('form','html','url'));

そして、ここに私の設定があります

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

13 に答える 13

2

$config['cookie_domain'] を localhost に設定することで、この問題を解決しました

$config['cookie_domain']    = "localhost";

最初は変数を www.exampledomain.com などの完全修飾ドメイン名に設定していましたが、その間はローカル サーバーを使用していました。

codeigniter セッション クラスで予期しないエラーが発生しないように、スクリプトが実行されているドメインは $config['cookie_domain] で設定されているドメインと同じである必要があります。

于 2015-02-16T13:25:26.590 に答える
2

まず、セッション項目に「\n」や「\v」などの特殊文字が含まれていないことを確認する必要があります。これらの文字により、文字列が途中で壊れる可能性があります。ヘルプが必要な場合は、 trim()を試してください。

それが役に立たない場合は、エンコードの問題である可能性があります。セッション項目を設定する前に暗号化し、使用する必要があるときに復号化してください。

于 2012-09-20T10:56:46.570 に答える
0

私の経験から、問題は次のようになります。

  1. ファイルの 1 つ (または複数) が「BOM 付きの UTF-8」ではありません (Web サイトが英語だけではなく、私のようにエンコードとして UTF-8 を使用している場合)。すべてのファイルを「UTF-8 with BOM」に変更する必要があります。メモ帳++が役立ちます。
  2. php タグの前または ?> の後にいくつかの文字があります (?> を削除した方がよい)。スペースを含む文字がないことを確認してください。
  3. アドレスとして localhost/xxxxxx を呼び出す場合は、127.0.0.1/xxxxxx または LAN IP に変更します。
  4. 私は常にセッションをファイルではなく DB に保存します (デバッグが容易です)。
于 2015-04-25T19:26:43.497 に答える
0

私の場合、(localhost で https と http を使用して) いくつかのテストを行った後、その問題に対してエラーが発生し、$config['cookie_secure'] が適切に設定されていないため、config.php で変更を試みることができます。

$config['cookie_secure']    = FALSE; // if is not under https, or true if you use https

乾杯!

于 2014-07-21T09:10:59.040 に答える