0

ユーザーのすべての資格情報が検証されたときに、コントローラーから codeigniter でセッションを設定しようとしています。ログインコントローラーのメソッドにこのコードがあります。メソッド ' login_check' は、form_validation の set rules メソッドによってコールバック関数として呼び出されます。あらゆる方法を試しましたが、何らかの理由で、CIのマニュアルによると単純なタスクであるはずのセッションを設定できません

注: セッションは autoload.php で自動ロードされます

    $this->form_validation->set_rules('password', 'password', 'trim|required|callback_login_check');


public function login_check($password) {
    $this->load->library('session');
    //Field validation succeeded.  Validate against database
    $username = $this->input->post('username');
    $this->load->model('industry_person');

    //query the database
    $query = $this->industry_person->check_login($username, $password);

    if (!$query) {
        $this->form_validation->set_message('login_check', 'Invalid username or password');
        return false;
        $this->index();
    } else {
        $data = array(
            'username' => $username,
            'is_logged_in' => true
        );
        if (!$this->session->set_userdata('logged_in', $data))
            echo "error setting session";

    }
}

正しい資格情報を入力し、それらがデータベースで一致する場合、 「エラー設定セッション」として出力を受け取ります。

4

4 に答える 4

2

から一重引用符を削除します$data。配列変数です。これを試して、

if (!$this->session->set_userdata('logged_in', $data))
            echo "error setting session";
于 2013-02-22T12:54:18.707 に答える
1

配列なので$data..試してみてください

if (!$this->session->set_userdata('logged_in', $data))
            echo "error setting session";
于 2013-02-22T12:56:57.717 に答える
0

codeigniter での session の使用は配列に基づいています。コントローラー コンストラクターで Session クラスを手動で初期化するには、$this->load->library 関数を使用します。

$this->load->library('session');

セッション配列の便利な点は、独自のデータを追加できることです。これはユーザーの Cookie に保存されます。なぜこれをしたいのですか?一例を次に示します。

特定のユーザーがサイトにログインするとします。認証が完了すると、ユーザー名と電子メール アドレスをセッション Cookie に追加して、必要なときにデータベース クエリを実行しなくても、そのデータをグローバルに利用できるようにすることができます。

データをセッション配列に追加するには、新しいデータを含む配列をこの関数に渡す必要があります

$this->session->set_userdata($array);

$array は、新しいデータを含む連想配列です。次に例を示します。

$newdata = array(
                   'username'  => 'johndoe',
                   'email'     => 'johndoe@some-site.com',
                   'logged_in' => TRUE
               );

$this->session->set_userdata($newdata);

セッション配列からの情報は、次の関数を使用して入手できます。

$this->session->userdata('item');

例えば:

if(!$this->session->userdata('logged_in')) {
    //do what you wanna do
}
于 2013-05-17T08:24:41.457 に答える
0

config.php ファイルの暗号化キーを変更すると、なんとか機能しました。以前の暗号化キーには「_」が含まれていましたが、新しい暗号化キーにはアルファベットのみが含まれています。

于 2013-02-22T13:08:01.557 に答える