我在php框架(Codeigniter(上开发了网站,在我的本地(WAMP服务器(上运行良好。当我将其上传到 Godaddy 托管时,它无法登录网站。 下面是登录类函数。
public function index()
{
if ($this->session->userdata('admin_login') == 1)
redirect(base_url() . 'index.php?admin/dashboard', 'refresh');
$this->load->view('backend/login');
}
function ajax()
{
$response = array();
$email = $_POST["email"];
$password = $_POST["password"];
$response['submitted_data'] = $_POST;
$login_status = $this->validate_login( $email , sha1($password) );
$response['login_status'] = $login_status;
if ($login_status == 'success') {
$response['redirect_url'] = '';
}
echo json_encode($response);
}
function validate_login($email = '' , $password = '')
{
$credential = array( 'email' => $email , 'password' => $password );
$query = $this->db->get_where('users' , $credential);
if ($query->num_rows() > 0) {
$row = $query->row();
$this->session->set_userdata('admin_login', '1');
$this->session->set_userdata('admin_id', $row->id);
$this->session->set_userdata('name', $row->name);
$this->session->set_userdata('login_type', 'admin');
return 'success';
}
return 'invalid';
}
我意识到 $this->session->set_userdata(( 方法不适用于 godaddy。
Please try this
Please add session library just like below.
$this->load->library('session');
if ($this->session->userdata('admin_login') == 1)
redirect(base_url() . 'index.php?admin/dashboard', 'refresh');
$this->load->view('backend/login');
首次加载会话库然后而不是使用这个
if ($this->session->userdata('admin_login') == 1)
使用这个
if ($this->session->userdata['admin_login'] == 1)
检查它是否正常工作
尝试一些替代方案可能有效:在application/config/config.php
中更改这些行
$config['sess_cookie_name'] = 'cisession'; //remove(underscore)
$config['cookie_domain'] = ".example.com"; //make it site wide valid
您可以在数组中存储多个会话变量
function validate_login($email = '', $password = '') {
$credential = array('email' => $email, 'password' => $password);
$query = $this->db->get_where('users', $credential);
if ($query->num_rows() > 0) {
$row = $query->row();
$sess_array = array(
'admin_login' => 1,
'admin_id' => $row->id,
'name', $row->name,
'login_type', 'admin'
);
$this->session->set_userdata('logged_in', $sess_array);
}
return 'invalid';
}
您需要在构造函数中上传session library
public function __construct()
{
parent::__construct(); /* necessary! */
/* load model for calls to database */
$this->load->library('session');// load session library
$this->load->helper('url');
}
在您的index
中,您必须检查用户logged_in
是否设置
public function index()
{
if ($this->session->userdata('logged_in')){// check session set or not
redirect(base_url() . 'index.php?admin/dashboard', 'refresh');
$this->load->view('backend/login');
}
}
好的,我假设您使用的是 CI2,因为您在不存在的会话变量上得到 FALSE。 CI 会话使用 cookie 和/或数据库,具体取决于您的配置。 配置文件上的 Cookie 设置是什么?
您应该注意以下设置:
$config['cookie_prefix'] = "";
$config['cookie_domain'] = "";
$config['cookie_path'] = "/";
$config['cookie_secure'] = FALSE;
和这些(两种情况下都显示默认配置(:
$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'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
您的网站是否托管在子域上? Cookie 通过标头设置。 在设置 Cookie 之前是否生成任何输出? 将log_threshold设置为 2,以便可以看到生成的最终错误和调试消息。
$config['log_threshold'] = 2;
您是否设置了加密密钥?
$config['encryption_key'] = '[there-must-be-something-here]';
我尝试了这里提到的所有答案,但不适用于我的问题。
我的问题是
$this->session->userdata('admin_login')
返回假。
最后,我尝试数据库来存储会话。
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
并创建了ci_sessions表。
CREATE TABLE IF NOT EXISTS `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(45) 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`)
);
然后它工作正常
这应该是您的配置
配置$config['sess_cookie_name'] = 'cisession';
$config['sess_expiration'] = 7200;
$config['sess_expire_on_close'] = TRUE;
$config['sess_encrypt_cookie'] = TRUE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
同样在您的模型中,您必须设置会话。
public function login ()
{
$user = $this->get_by(array(
'email' => $this->input->post('email'),
'password' => $this->hash($this->input->post('password')),
), TRUE);
if (count($user)) {
// Log in user
$data = array(
'name' => $user->name,
'email' => $user->email,
'gender'=>$user->gender,
'user_num'=>$user->user_num,
'id' => $user->id,
'loggedin' => TRUE,
'balance' =>$user->balance,
'usertype' =>'admin',
);
$this->session->set_userdata($data);
}
}
这对我有用:)