0

こんにちは、私は codeigniter で開発された 2 つのサイトを持っています。これらのサイトはまったく異なりますが、user の mdoel は login メソッドのように似ています。そのコードをリサイクルしようと考えたからです。問題は次のとおりです。あるサイトにログインして別のサイトを開くと、データベースに存在しない別のサイトのユーザーでログインしています。データベースが異なります。何が問題なのか、ログイン方法をモデルや構成に変更する必要があるのか​​ わかりません。

これはモデルでの私の方法です:

function login($username = '', $password = '') {
        $user_name = base64_decode($username);
        $password  = base64_decode($password);

        //Make sure login info was sent
        if($username == '' || $password == '') {
            return FALSE;
        }

        //Check if already logged in
        if( $this->session->userdata('username') == $username && $this->session->userdata('logged_in') ) {
            //User is already logged in.
            return TRUE;
        }
        //Check against user table
        $this->db->where('username', $user_name);
        $this->db->where('password', $this->encrypt->sha1($password) );
        $this->db->where('active', 1);

        $query = $this->db->get_where($this->user_table);
        if ($query->num_rows() > 0) {
            $row = $query->row_array(); 

            //Destroy old session
            $this->session->sess_destroy();

            //Create a fresh, brand new session
            $this->session->sess_create();

            //Update Last Login
            $data = array(
               'last_login' => date('Y-m-d H:i:s')
            );

            $this->db->where('id', $row['id']);
            $this->db->update($this->user_table, $data); 

            //Set session data
            $this->session->set_userdata(array('id' => $row['id'], 'username' => $row['username'],'name' => $row['name'], 'surname' => $row['surname'], 'language' => $row['language']));

            if ($row['type']==1){
                //se è 1 è un administrator
                $this->session->set_userdata(array('is_admin' => 1));   
            }
            else{
                $this->session->set_userdata(array('is_admin' => 0));
            }

            //Set logged_in to true
            $this->session->set_userdata(array('logged_in' => TRUE));   

            //image profile
            $this->db->where('user_id', $row['id']);

            $query2 = $this->db->get_where('user_image_profile');
            if ($query2->num_rows() > 0) {
                $row_image = $query2->row_array(); 
                $this->session->set_userdata(array('img_profile' => $row_image['filename']));
            }       

            //Login was successful          
            return TRUE;
        } else {
            //No database result found
            return FALSE;
        }   
     }
4

2 に答える 2

1

config問題はファイルにあると思います。ここでは、一方のサイトにログインし、ここでログインしたもう一方のサイトを開くときに、両方のサイトに同じ「encryption_key」を使用します。したがって、両方のサイトで異なる「encryption_key」を使用する必要があります。

最初のウェブサイトのように-

$config['encryption_key'] = 'gHZc2let11sp3YAns00rggHlYNMp7CVX';

そして2番目のもの -

$config['encryption_key'] = 'V1M839GlUk65rKzm1GM67H66X1WLD6ay';
于 2013-05-08T07:13:44.770 に答える
0

アプリケーションごとに、セッションをデータベースに保存するように構成できます。設定ファイルを変更します。

sess_use_database = true;

その後、データベースにこのテーブルを作成する必要があります

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`)
);
于 2015-03-01T00:37:50.693 に答える