我在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。
答案 0 :(得分:2)
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');
答案 1 :(得分:2)
首次加载会话库 然后 而不是使用此
if ($this->session->userdata('admin_login') == 1)
使用此
if ($this->session->userdata['admin_login'] == 1)
检查它是否有效
答案 2 :(得分:1)
尝试一些替代方案可能有效:
在application/config/config.php
$config['sess_cookie_name'] = 'cisession'; //remove(underscore)
$config['cookie_domain'] = ".example.com"; //make it site wide valid
答案 3 :(得分:1)
您可以在数组中存储多个会话变量
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');
}
}
答案 4 :(得分:1)
好的,我假设你正在使用CI2,因为你在一个不存在的会话var上得到了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]';
答案 5 :(得分:1)
我尝试了这里提到的所有答案,但不适用于我的问题。
我的问题是
$this->session->userdata('admin_login')
返回false。
最后,我尝试使用数据库存储会话。
$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`)
);
然后它工作正常
答案 6 :(得分:0)
这应该是您的配置配置
You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near
'ON DUPLICATE KEY UPDATE updated_at = now()
同样在您的模型中您必须设置会话。
$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;
这对我有用:)