我获取时得刷新一次才不报错,请大家看下面代码
在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请求中去?如果你这两个都实现了,这个问题就解决了,千万不要纠结语句怎么写,这是机械性的代码,手册也好百度也好你能找到答案的版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。