我获取时得刷新一次才不报错,请大家看下面代码
在localhost/session/下有下面4个文件
表单文件form.php
<html> <head> <title>表单提交</title> <meta charset='utf-8'> </head> <body> <form name='curl' method='post' action='action.php'> 用户名:<input type='text' name='user' ><br/> 密码:<input type='password' name='pwd'><br/> <input type='submit' name='sub' value="sub"> </form> </body> </html>表单提交处理文件action.php
<?php
header("content-type:text/html;charset='utf-8'");
session_start();
$u=@$_POST['user'];
$p=@$_POST['pwd'];
if($u=='hkui'&&$p=='123'){
$_SESSION['keykey']='okokok';
header("location:main.php");
echo "欢迎,有权限访问action.php";
// print_r($_SESSION);
}else{
echo "无权访问";
}
?>
登陆验证后跳转到的文件main.php
<?php
header("content-type:text/html;charset='utf-8'");
session_start();
if(@$_SESSION['keykey']=='okokok')
{
echo "<br/>main.php","欢迎访问";
}else{
echo "<br/>无权访main.php面";
}
?>
最后一个模拟session登陆的文件curl.php
<?php
header("content-type:text/html;charset='utf-8'");
$post_url="http://localhost/session/action.php";
$post_data="user=hkui&pwd=123";
session_start();
$strCookie="PHPSESSID=".$_COOKIE['PHPSESSID'];
session_write_close();
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$post_url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_COOKIE, $strCookie);
curl_setopt($ch,CURLOPT_POSTFIELDS,$post_data);
$con=curl_exec($ch);
curl_close($ch);
echo $strCookie;
echo "<hr/>";
$url="http://localhost/session/main.php";
$ch=curl_init();
session_write_close();
curl_setopt($ch, CURLOPT_COOKIE, $strCookie);
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$con=curl_exec($ch);
curl_close($ch);
echo $con;
$
//print_r($_SESSION);
/*
echo <<<EEE
<script type="text/javascript">
window.location.
</script>
EEE;
*/
?>
模拟登陆也能成功,但是第一次进入时出现好多问题,刷新后就一切ok了
但刷新下就好了
如果session_write_close(); 写在后面 浏览器会死掉
还有CURLOPT_COOKIE到底怎么传东西的啊
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
逻辑有点小问题,之所以第二次刷新后一切OK,是因为第二次你提交了session_id的cookie给服务端,第一次你没获取到session_id的cookie, 请看第六行: $strCookie="PHPSESSID=".$_COOKIE['PHPSESSID'];
补充下,模拟登录一般流程是这样的:
提交帐号信息-》服务器端验证---》返回cookie--->携带cookie访问--》服务器认为你已经登录了
回复 @西门飞:是基于cookie的,我以为他俩的不一样,原来是一样的方式,让你见笑了,我想的太复杂了,谢谢您热心回复我!回复 @hphper:session是基于cookie没有cookie哪来的session回复 @西门飞:我这是session啊,cookie的那个我明白的回复 @hphper:如果你实在不想用原声的curl去实现,你可以考虑下snoopy这个库回复 @hphper:详细代码怎么写,你应该自己去看手册,你可以这样:1、提交帐号信息给服务器端,然后怎么获取服务器端返回的cookie?手册里面应该可以找到的你用的curl去看看,2、获取到服务器端返回的cookie以后想想怎么把这个cookie放到http请求中去?如果你这两个都实现了,这个问题就解决了,千万不要纠结语句怎么写,这是机械性的代码,手册也好百度也好你能找到答案的