Php 不同站点的Codeigniter会话
大家好,我有两个在codeigniter开发的网站。这些站点完全不同,但用户的mdoel与登录方法类似,因为我想回收这些代码。 问题是:如果我登录到一个站点并打开另一个站点,我将与数据库中不存在的另一个站点的用户一起登录到该站点。 数据库是不同的,我不知道是什么问题,或者我是否必须将我的登录方法更改为我的模型或某些配置 这是我在模型中的方法:Php 不同站点的Codeigniter会话,php,codeigniter,session,Php,Codeigniter,Session,大家好,我有两个在codeigniter开发的网站。这些站点完全不同,但用户的mdoel与登录方法类似,因为我想回收这些代码。 问题是:如果我登录到一个站点并打开另一个站点,我将与数据库中不存在的另一个站点的用户一起登录到该站点。 数据库是不同的,我不知道是什么问题,或者我是否必须将我的登录方法更改为我的模型或某些配置 这是我在模型中的方法: function login($username = '', $password = '') { $user_name = base64_
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;
}
}
我认为问题出在
config
文件中。在这里,由于这个原因,当您登录一个站点并打开另一个站点时,您对这两个站点使用相同的“加密密钥”。因此,您必须为这两个站点使用不同的“加密密钥”
就像第一个网站-
$config['encryption_key'] = 'gHZc2let11sp3YAns00rggHlYNMp7CVX';
第二个呢-
$config['encryption_key'] = 'V1M839GlUk65rKzm1GM67H66X1WLD6ay';
对于每个应用程序,可以将会话配置为存储在数据库中。更改配置文件
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`)
);
这两个站点是否运行在同一个域上?是的,因为在我的演示服务器中,Sharif Ul Islam的解决方案是否有效?