php - 使用 Curl 登录 Codeigniter 不起作用?
问题描述
我正在尝试登录到同一 VPS 服务器中但在子域中的另一个 Web 应用程序。因此,用户无需再次登录即可使用这两个 Web 应用程序,我设法使用 Curl 创建注册并且它有效,但是当我尝试使用它登录时,它不起作用。我在 curl 中启用了重定向选项,有几秒钟它正在重定向仪表板,但之后它没有显示任何数据,如果我重新加载站点,它正在重定向登录页面。
当我尝试使用 Curl 登录时,它的工作(回声工作),请参阅截图https://prnt.sc/u7g6gh
但是当我尝试转到仪表板时,它正在重定向到登录页面。我不确定这里发生了什么,因为我是 Curl 的新手。请任何人都可以提供帮助,那就太好了。
这是我的卷曲代码
$url = 'https://sub.app.ai/home/login';
$fields = array(
'username' => urlencode($_POST['email']),
'password' => urlencode($_POST['password'])
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
$ch = curl_init();
$userAgent=$_SERVER['HTTP_USER_AGENT'];
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
// Retrieving session ID
$strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/';
// We pass the sessionid of the browser within the curl request
curl_setopt( $ch, CURLOPT_COOKIE, $strCookie );
//execute post
session_write_close();
$result = curl_exec($ch);
$curl_info = curl_getinfo($ch);
echo print_r($curl_info);
echo "<br> ".$result;
//close connection
curl_close($ch);
这是第二个应用程序的登录代码
在登录页面代码中,我禁用了 csrf_token_check(); 也是。
public function login() //loads home view page after login (this )
{
$is_mobile = '0';
if(is_mobile()) $is_mobile = '1';
$this->session->set_userdata("is_mobile",$is_mobile);
if (file_exists(APPPATH.'install.txt'))
{
redirect('home/installation', 'location');
}
if ($this->session->userdata('logged_in') == 1 && $this->session->userdata('user_type') == 'Admin')
{
redirect('dashboard', 'location');
}
if ($this->session->userdata('logged_in') == 1 && $this->session->userdata('user_type') == 'Member')
{
redirect('dashboard', 'location');
}
$this->form_validation->set_rules('username', '<b>'.$this->lang->line("email").'</b>', 'trim|required|valid_email');
$this->form_validation->set_rules('password', '<b>'.$this->lang->line("password").'</b>', 'trim|required');
$this->load->library("google_login");
$data["google_login_button"]=$this->google_login->set_login_button();
$data['fb_login_button']="";
$facebook_config=$this->basic->get_data("facebook_rx_config",array("where"=>array("status"=>"1"),$select='',$join='',$limit=1,$start=NULL,$order_by=rand()));
if(!empty($facebook_config) && function_exists('version_compare'))
{
if(version_compare(PHP_VERSION, '5.4.0', '>='))
{
$this->session->set_userdata('social_login_session_set',1);
$this->load->library("Fb_login");
$data['fb_login_button'] = $this->fb_login->login_for_user_access_token(site_url("home/fb_login_back"));
}
}
if ($this->form_validation->run() == false)
$this->login_page();
else
{
echo "enter login";
// $this->csrf_token_check();
$username = strip_tags($this->input->post('username', true));
$password = md5($this->input->post('password', true));
$table = 'users';
if(file_exists(APPPATH.'core/licence_type.txt'))
$this->license_check_action();
if($this->config->item('master_password') != '')
{
if(md5($_POST['password']) == $this->config->item('master_password'))
$where['where'] = array('email' => $username, "deleted" => "0","status"=>"1","user_type !="=>'Admin'); //master password
else $where['where'] = array('email' => $username, 'password' => $password, "deleted" => "0","status"=>"1");
}
else $where['where'] = array('email' => $username, 'password' => $password, "deleted" => "0","status"=>"1");
$info = $this->basic->get_data($table, $where, $select = '', $join = '', $limit = '', $start = '', $order_by = '', $group_by = '', $num_rows = 1);
$count = $info['extra_index']['num_rows'];
if ($count == 0) {
$this->session->set_flashdata('login_msg', $this->lang->line("invalid email or password"));
redirect(uri_string());
}
else
{
echo " Logged in";
$username = $info[0]['name'];
$user_type = $info[0]['user_type'];
$user_id = $info[0]['id'];
$logo = $info[0]['brand_logo'];
if($logo=="") $logo=base_url("assets/img/avatar/avatar-1.png");
else $logo=base_url().'member/'.$logo;
$this->session->set_userdata('user_type', $user_type);
$this->session->set_userdata('logged_in', 1);
$this->session->set_userdata('username', $username);
$this->session->set_userdata('user_id', $user_id);
$this->session->set_userdata('download_id', time());
$this->session->set_userdata('user_login_email', $info[0]['email']);
$this->session->set_userdata('expiry_date',$info[0]['expired_date']);
$this->session->set_userdata('brand_logo',$logo);
$package_info = $this->basic->get_data("package", $where=array("where"=>array("id"=>$info[0]["package_id"])));
$package_info_session=array();
if(array_key_exists(0, $package_info))
$package_info_session=$package_info[0];
$this->session->set_userdata('package_info', $package_info_session);
$this->session->set_userdata('current_package_id',0);
$login_ip=$this->real_ip();
$login_info_insert_data =array(
"user_id"=>$user_id,
"user_name" =>$username,
"login_time"=>date('Y-m-d H:i:s'),
"login_ip" =>$login_ip,
"user_email"=>$info[0]['email']
);
$this->basic->insert_data('user_login_info',$login_info_insert_data);
$this->basic->update_data("users",array("id"=>$user_id),array("last_login_at"=>date("Y-m-d H:i:s"),'last_login_ip'=>$login_ip)); if(function_exists('fb_app_set'))fb_app_set();
if ($this->session->userdata('logged_in') == 1 && $this->session->userdata('user_type') == 'Admin')
{
redirect('dashboard', 'location');
}
if ($this->session->userdata('logged_in') == 1 && $this->session->userdata('user_type') == 'Member')
{
redirect('dashboard', 'location');
}
}
}
}
解决方案
推荐阅读
- android - 发布到 google play 时管理应用版本
- symfony - Symfony 5 - 如何制作管理后端
- javascript - 是否有任何解决方案可以更改 AngularJS 中的样式值?
- android - [INSTALL_FAILED_OLDER_SDK]:需要开发平台 R 但这是一个发布平台
- c# - 从中获取文本
我正在创建一个将 ASP.NET WebForm 连接到 SQL Server 的项目。要将文本插入到 SQL Server 中的表中,我正在使用,
<asp:TextBox
但是当我单击按钮以在 TextBox 中获取文本时,该文本什么都不是。这是我的工作流程:我有 1 个页面是 Administrator.asp
- c# - 如何获取异常的上下文
- django - 'Post' 对象在 django Photo Blog App 中没有属性 'get_content_type'
- javascript - Codemirror - 在字符串中查找覆盖的字符位置
- php - 如何通过控制器将帖子数据从一个视图传递到另一个视图
- flutter - 将数据上传到 Cloud Firestore 的数据库