1

私は長い間stackoverflowを熱心に読んでいましたが、今度は質問をする番です。

http://net.tutsplus.com/tutorials/php/easy-authentication-with-codeigniter/チュートリアルに従って、自分で問題なく動作させることができましたが、システムを少し拡張する必要があります。ユーザーが検証された後、認証された人の追加の行フィールドをプルしてセッション変数に格納し、データベースに情報を送り返すために他のコントローラーで使用できるようにする必要があります。

たとえば、セッション変数$ f_nameに入れたいのですが、$usernameが必要です。私は高くも低くも見え、答えを見つけましたが、彼らは私を混乱させただけです。

私のモデル:

class admin_model extends CI_Model {
 function __construct( )
 {

 }

 public function verify_user($user_id, $password)
 {
 $q = $this->db->where('user_id', $user_id)
 ->where('password', sha1($password))->limit(1)->get('users');

 if ( $q->num_rows > 0   ){
     return $q->row();
 }
return false;

}

}

私のコントローラー:

class admin extends CI_Controller {

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


}

public function index()
{
    if ( isset($_SESSION['user_id'])){
        redirect('welcome');
    }
    $this->load->library('form_validation');
    $this->form_validation->set_rules('user_id', 'User ID', 'required|min_length[8]');
    $this->form_validation->set_rules('password', 'Password', 'required|min_length[4]');

    if ($this->form_validation->run() !==false){
       $this->load->model('admin_model');
      $res = $this
          ->admin_model
          ->verify_user(
          $this->input->post('user_id'),
          $this->input->post('password')
      );
   if ($res !== false) {
    $_SESSION['user_id'] = $this->input->post('user_id');
    redirect ('welcome');
   }






    }

    $this->load->view('login_view');
}

public function logout(){

    session_destroy();
    redirect ('admin');
}
}

みんなありがとう、そして私はあなたの答えを楽しみにしています\提案

4

1 に答える 1

4

いくつかのこと:
-コードイグナイターモデルコンストラクターを継承するために必要な__construct()関数(または関数が空であるため削除される可能性があります)。 -コードイグナイターとPHPセッションは異なります。PHPセッションを使用しているため、セッションデータにアクセスするすべてのページで出力が送信される前に呼び出す必要があります。これは、session.autostartをオンにすることで、php.iniのすべてのページに設定することもできます。admin_modelparent::__construct
session_start()

コードイグナイターセッションを使用する場合は、こちらをご覧ください:http: //ellislab.com/codeigniter/user-guide/libraries/sessions.html

2012年12月21日更新

返されたデータベース行からセッション変数を設定してみてください。

$_SESSION['f_name'] = $res->f_name;セッションのユーザーID変数を設定している場所と$_SESSION['username'] = $res->username;同じ場所にあります。データベースフィールドが、f_nameフィールドとusernameフィールドに使用するフィールドにマッピングされていると想定しています。

于 2012-12-19T22:32:04.857 に答える