热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ciphp框架注册登录,如何使用curl模拟登录ci框架项目?

curl模拟登录代码:header(“content-type:texthtml;charset’utf-8’”);$login_url‘http:127.0.0.1

curl模拟登录代码:

header(“content-type:text/html;charset=’utf-8’”);

$login_url = ‘http://127.0.0.1/app/index.php/auth/do_login‘;//登录页地址

$post_fields = array();

$post_fields[‘loginfield’] = ‘user’;

$post_fields[‘loginsubmit’] = ‘true’;

$post_fields[‘user’] = ‘cj’;

$post_fields[‘pass’] = ‘a’;

$COOKIE_file = tempnam(‘./temp’,’COOKIE’);

$ch = curl_init($login_url);

curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5’);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_MAXREDIRS, 1);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch, CURLOPT_AUTOREFERER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);

curl_setopt($ch, CURLOPT_COOKIESESSION, true);

curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIE_file);

$res=curl_exec($ch);

echo $res;

curl_close($ch);

?>

处理登录代码:

function do_login()

{

$username = $this->input->post(“user”);

$password = $this->input->post(“pass”);

try {

$this->load->model("User_Model");

$user = $this->User_Model->find_user_byname(trim($username));

if($user->pw != md5(trim($password))) throw new Exception("用户名或密码错误!");

$this->load->library('session');

$this->session->set_userdata(array(

'user_id' => $user->tid,

'user_name' => $user->xm

));

$msg['code'] = 1;

$msg['msg'] = "登录成功";

$msg['user_id'] = $user->tid;

$msg['user_name'] = $user->xm;

$msg['session_id'] = $this->session->userdata('session_id');

} catch (Exception $e) {

$msg['code'] = 0;

$msg['msg'] = $e->getMessage();

}

echo json_encode($msg);

}

采用curl模拟登录成功了,返回的$msg中的值都是正确的。但是随后调用

echo json_encode($this->session->userdata(“user_id”));这段代码却获取不到数据。

而正常的登录就可以正常获取到数据。

回复内容:

curl模拟登录代码:

header(“content-type:text/html;charset=’utf-8’”);

$login_url = ‘http://127.0.0.1/app/index.php/auth/do_login‘;//登录页地址

$post_fields = array();

$post_fields[‘loginfield’] = ‘user’;

$post_fields[‘loginsubmit’] = ‘true’;

$post_fields[‘user’] = ‘cj’;

$post_fields[‘pass’] = ‘a’;

$COOKIE_file = tempnam(‘./temp’,’COOKIE’);

$ch = curl_init($login_url);

curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5’);

curl_setopt($ch, CURLOPT_HEADER, 0);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_MAXREDIRS, 1);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch, CURLOPT_AUTOREFERER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);

curl_setopt($ch, CURLOPT_COOKIESESSION, true);

curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIE_file);

$res=curl_exec($ch);

echo $res;

curl_close($ch);

?>

处理登录代码:

function do_login()

{

$username = $this->input->post(“user”);

$password = $this->input->post(“pass”);

try {

$this->load->model("User_Model");

$user = $this->User_Model->find_user_byname(trim($username));

if($user->pw != md5(trim($password))) throw new Exception("用户名或密码错误!");

$this->load->library('session');

$this->session->set_userdata(array(

'user_id' => $user->tid,

'user_name' => $user->xm

));

$msg['code'] = 1;

$msg['msg'] = "登录成功";

$msg['user_id'] = $user->tid;

$msg['user_name'] = $user->xm;

$msg['session_id'] = $this->session->userdata('session_id');

} catch (Exception $e) {

$msg['code'] = 0;

$msg['msg'] = $e->getMessage();

}

echo json_encode($msg);

}

采用curl模拟登录成功了,返回的$msg中的值都是正确的。但是随后调用

echo json_encode($this->session->userdata(“user_id”));这段代码却获取不到数据。

而正常的登录就可以正常获取到数据。

再次调用页面的时候要把ci_session 这个COOKIE和 useragent头带上,IP也不能变,但你应该是同一台机器,可以不用考虑。另外,COOKIE默认会每隔5分钟更新一次,如果你是长时间请求,建议每次把服务器返回的新COOKIE 带到下一次请求中。

发现问题的所在了,原来是采用curl模拟登录ci框架项目后,无法在服务端保存session数据。

正常情况下,session文件是保存在服务端的C:\Documents and Settings\Administrator\Local Settings\Temp目录下的,比如文件名是sess_e7ced24a34353ad44d2ea41843ba786g,如果不是采用curl模拟登录,那么在执行保存session的代码后:

session_start();

$_SESSION["user_id"] = $user->tid;

在sess_e7ced24a34353ad44d2ea41843ba786g文件里面会生成session数据,如:

user_id|s:2:"20";

但是采用curl模拟登录之后,就算保存session的代码,在sess_e7ced24a34353ad44d2ea41843ba786g文件里面也不能保存任何session数据,这个session文件里面的内容都是空的。

这个是什么原因引起的?该如何解决呢?

问题的根本是CI2的Session是用COOKIE实现的~!根本没法保存Session数据~!

请看拙文一篇,优雅地使用CodeIgniter之Session类库

本文原创发布php中文网,转载请注明出处,感谢您的尊重!



推荐阅读
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 自定义滚动条美化页面内容
    当页面内容超出显示范围时,为了提升用户体验和页面美观,通常会添加滚动条。如果默认的浏览器滚动条无法满足设计需求,我们可以自定义一个符合要求的滚动条。本文将详细介绍自定义滚动条的实现过程。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 如何在PHP中获取数组中特定元素的索引位置
    在PHP中获取数组中特定元素的索引位置有多种方法。首先,可以使用 `array_search()` 函数,其语法为 `array_search(目标值, $array)`,该函数将返回匹配元素的第一个键名(即下标)。其次,也可以利用 `array_keys()` 函数,通过 `array_keys($array, 目标值)` 语法来获取所有匹配元素的键名列表。这两种方法都能有效解决数组元素定位的问题,具体选择取决于实际需求和性能考虑。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 微软推出Windows Terminal Preview v0.10
    微软近期发布了Windows Terminal Preview v0.10,用户可以在微软商店或GitHub上获取这一更新。该版本在2月份发布的v0.9基础上,新增了鼠标输入和复制Pane等功能。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 两个条件,组合控制#if($query_string~*modviewthread&t(&extra(.*)))?$)#{#set$itid$1;#rewrite^ ... [详细]
author-avatar
mobiledu2502923673
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有