登录原理验证码通过session保存并验证,而session通过cookie获取SSID一、定义Cookie存储路径必须使用绝对路径$cookie_jardirn
登录原理
验证码通过session保存并验证,而session通过COOKIE获取SSID
一、定义COOKIE存储路径
必须使用绝对路径
$COOKIE_jar = dirname(__FILE__)."/this_test.COOKIE";//指定存储路径
二、获取COOKIE
将COOKIE存入文件
$url = "http://web.mall.com/ "; //用来测试的本地网站的url
$ch = curl_init(); //开启curl连接
//curl配置
curl_setopt($ch, CURLOPT_URL, $url); //写入url
curl_setopt($ch, CURLOPT_HEADER, 0); //是否有写入头信息需要写入=>false
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
//当CURLOPT_RETURNTRANSFER设置为1时 $content 有请求的返回值
//当设置为0是$content没有返回值,直接输出请求的内容
curl_setopt($ch, CURLOPT_COOKIEJAR,$COOKIE_jar); //临时建立的COOKIE文件路径
$content = curl_exec($ch); //执行curl,并把结果返回给一个字符串
curl_close($ch); //关闭curl连接
三、把刚刚得到的COOKIE用来获取验证码图片
登陆界面 >表单中验证码相关字段与函数如下,可知验证码的地址
请输入您的用户名!"/>
请输入您的用户密码!"/>
请输入验证码!">
登录
functionform_login(){
$(function(){
$.ajax({
url:"/login/checkUser",
data:$("#login_Data").serialize(),
dataType:"json",
type:"post",
success:function(msg){
if(msg.err=="ok"){
window.location.href="/";
}else{
alert(msg.err);
}
}
});//ajax结束
});
}
//
可知验证码图片地址为
http://web.mall.com/login/checkpic
//现在取出验证码图片
$verify_code_url="http://web.mall.com/login/checkpic";
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $COOKIE_jar);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img = curl_exec($curl); //获取验证码图片
curl_close($curl);
$fp = fopen("verifyCode.jpg","w");//将验证码图片保存到本地
fwrite($fp,$img);
fclose($fp);
然后通过表单把用户名、密码、验证码传入登陆验证的curl的php文件中去
四、POST提交到登陆验证的地址
$check_url=”http://web.mall.com/login/CheckUser”;//验证帐号的地址
$post = array(
'username'=> $_POST['username'] ,
'pwd' => $_POST['pwd'],
'checkCode'=>$_POST['checkCode']
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://1.2.3.4/loginstudent.action");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POSTFIELDS,$post);
curl_setopt($ch, CURLOPT_COOKIEFILE,$COOKIE_jar);
$result=curl_exec($ch);
curl_close($ch);
五、到指定页面获取数据
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://1.2.3.4/accountcardUser.action");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,0); //直接输出页面
curl_setopt($ch, CURLOPT_COOKIEFILE,$COOKIE_jar);
$html=curl_exec($ch);
curl_close($ch);
六、获取完所需要的数据后,清理COOKIE文件
@unlink($COOKIE_file);
下面是我写了个对应案例
①【显示登陆框】index.php
$COOKIE_jar = dirname(__FILE__)."/this_test.COOKIE";//指定存储路径
$url = "http://web.mall.com/"; //我们以模拟登陆本地网址为例
$ch = curl_init(); //开启curl连接
//curl配置
curl_setopt($ch, CURLOPT_URL, $url); //写入url
curl_setopt($ch, CURLOPT_HEADER, 0); //是否有写入头信息需要写入=>false
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); //当CURLOPT_RETURNTRANSFER设置为1时 $content 有请求的返回值//当设置为0是$content没有返回值,直接输出请求的内容
curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIE_jar); //临时建立的COOKIE文件路径
$content = curl_exec($ch); //执行curl, 并把结果返回给一个字符串
curl_close($ch); //关闭curl连接$now_url="http://".$_SERVER["HTTP_HOST"].$_SERVER['REQUEST_URI'];//获取当前目录网址
require 'get_verify_code.php';
echo <<
eof;
②【获取验证码】get_verify_code.php
$verify_code_url&#61;"http://web.mall.com/login/checkpic";
$curl &#61; curl_init();
curl_setopt($curl, CURLOPT_URL, $verify_code_url);
curl_setopt($curl, CURLOPT_COOKIEFILE, $COOKIE_jar);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$img &#61; curl_exec($curl); //获取验证码图片
curl_close($curl);
$fp &#61; fopen("verifyCode.jpg","w");//将验证码图片保存到本地
fwrite($fp,$img);
fclose($fp);
?>
③【输出已登录的页面信息】result.php
$check_url&#61;"http://web.mall.com/login/CheckUser";//验证帐号的地址
$COOKIE_jar&#61;$_POST[&#39;COOKIE_jar&#39;];
$post &#61; array(
&#39;username&#39; &#61;> $_POST[&#39;username&#39;] ,
&#39;pwd&#39; &#61;> $_POST[&#39;pwd&#39;],
&#39;checkCode&#39;&#61;> $_POST[&#39;checkCode&#39;]
);
$ch &#61; curl_init();
curl_setopt($ch, CURLOPT_URL, $check_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_POST, 1);// post数据
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIE_jar);
$result&#61;curl_exec($ch);
curl_close($ch);//获取转跳页面的数据
$ch &#61; curl_init();
curl_setopt($ch, CURLOPT_URL, "http://web.mall.com/personal");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,0); //直接输出页面
curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIE_jar);
$html&#61;curl_exec($ch);
curl_close($ch);
$unlink($COOKIE_jar);