实现前提
- 第一种方法,之前的代码已经将模拟登陆实现了,并且产生了一个cookiefile文件,这里面存储的是cookie信息,包括sessionID。
- 第二种方法,将Head头输出,手动将sessionID保存下来,以备使用。
curl_setopt($curl,CURLOPT_HEADER,1);// 打印头部信息
输出后的信息如下:
HTTP/1.1 200 OK Date: Wed, 18 May 2016 09:55:49 GMT
Server: Apache/2.4.7 (Ubuntu) X-Powered-By: PHP/5.5.9-1ubuntu4.14
Cache-Control: no-cache
Set-Cookie: laravel_session=eyJpdiI6IkhaS1FyNnUyeWhTVUNqV2xTN2w4Rmc9PSIsInZhbHVlIjoiZ0d3ZytPXC9KUGh6NWFEeFg4UXNWTnVPNW5rbG9TZ1Azc0tpcWRPZEx0Q09Vc3BGSFd3V3VKNE9xM2NMenh3clBrVm4zeHVjaUd3dUpJbEJSVVJ2NXpBPT0iLCJtYWMiOiI5ZjllNjVlZDQ4NDAwNDhhYTU3ZGI2YTU0OTJmYmQ4M2JlMzRjYWQ1NmU4NDY0YzZjMDE0OTAyZWEwYzU3NjU0In0%3D; expires=Wed, 18-May-2016 11:55:49 GMT; Max-Age=7200; path=/; httponly Vary: Accept-Encoding Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8
实现步骤
- 获取sessionID
在实现前提中已经获取到了,到这一步只需要正则匹配到数据或者是直接手动赋值,就可以了。
- 将sessionID在发送请求CURL之前存入session中。
curl_setopt($curl,CURLOPT_COOKIE,"laravel_session"."=".$a);
- 改一个本网站其他的URL地址。
curl_setopt($curl, CURLOPT_URL, 'http://www.ydma.cn/');
测试:首先模拟登陆,然后在服务器打开此脚本,就会看到,维持登陆成功。
失败原因:cookie文件没内容,需要先关闭curl
culr_close($curl)
cookie文件没自动生成,可能是因为缓存的原因,清一下缓存或者换一个账户登陆。
laravel_session 过期了,将cookiefile删除,重新生成或者清楚缓存,重新登陆。
源码奉上
<?php
// 设定时区
date_default_timezone_set("PRC");
// 初始化
$curl = curl_init();
// 获取session -- 代码获取
// $cookiefile = file_get_contents("./cookiefile");
// 匹配sessionid
// $arr = substr($cookiefile,strpos($cookiefile,"laravel_session"),strlen($cookiefile));
// $a = substr($arr,16,strlen($arr));
// 获取session -- 手动获取
$a = "eyJpdiI6ImtaOWRPNjQyc2U5R2VvNlFmZGJyOUE9PSIsInZhbHVlIjoiN2pFZDd6QlJHaFlzdHY0Kzl4WjFwdFFuMFZOWmtUbkl2NTJFZHdQYVFKVDBEMmRSUHoxR0liV2ZyMWdNTFFheDJGRU45VG9lWTdWTytDbGRpeXJTOHc9PSIsIm1hYyI6IjgyZmVmN2Q2NDVhMzhmOTY3ODdlMmMyYmE5YzRkNDJlZTc1OWRmOTgyMGIzZDI0NTViNWQzMDNhMTMyZjNlNDMifQ%3D%3D";
curl_setopt($curl,CURLOPT_REFERER,"http://www.ydma.cn/");// 设定来源页
// 基本配置
curl_setopt($curl, CURLOPT_URL, 'http://www.ydma.cn/');// 网址
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);// 不输出
// Cookie相关设置
curl_setopt($curl,CURLOPT_COOKIE,"laravel_session"."=".$a);// 存储的是session_name()和session_id()
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);// 设置可以跳转
curl_setopt($curl,CURLOPT_HEADER,0);// 不去打印头部信息
$res = curl_exec($curl);
curl_close($curl);
echo $res;