php实现模拟登陆的原理讨论交流
翻了很多资料,因为自己需要做个这样的程序,归纳了以下几点,请大家看看对不对。
由于通常网站对登陆的判断都是通过登陆程序产生的session和cookie实现的,所以实现方法基本上有两种:
1、获得cookie内容。通过php发送登陆部分的post给网站的登陆程序,然后分析返回内容,取出其中的cookie部分,在进行其他页面访问时将其作为变量加入,从而满足服务器上对登陆验证的判断。
2、获得sessionid。因为sid是php4对于不能保存cookie的浏览器的变相兼容处理方法,所以可以通过页面访问时带参sid来实现虚拟session连线。通过php发送登陆资料给服务器登陆程序,然后分析得到返回的phpsessid从而维持登陆。
目前已有的很多例子,里面的实现方法大体都是这样:fsockopen函数打开远程端口,fputs进行句柄内容写入,fgets得到返回内容,然后进行分析并继续其他操作。现有疑问如下:
1、打开远程端口用fopen为何不可?
2、看了一下http1.0协议(没找到详细的)。不明白fputs发出内容时POST和GET的区别,以及它们得到返回内容的区别。
3、传回内容中如果有cookie的话,格式是“换行Set-Cookie:xx换行”。如果是sessionid的话,格式是“换行PHPSESSID=xx;换行”。对否?
4、如果上述两种虚拟登陆方法正确的话,似乎虚拟的后续使用上用phpsessid比cookie要方便?
5、在尝试用fputs($f,$cmd);的方式送入$cmd="\r\nGET test4.php HTTP/1.0\r\n\r\n"的时候,提示错误:
------------------------------
Bad Request
Your browser sent a request that this server could not understand.
Invalid URI in request GET test4.php HTTP/1.0
HTTP/1.1 400 Bad Request Date: Sat, 31 Dec 2005 19:40:07 GMT Server: Apache/1.3.33 (Unix) Resin/2.1.14 mod_throttle/3.1.2 mod_ssl/2.8.22 OpenSSL/0.9.7d Connection: close Content-Type: text/html; charset=iso-8859-1
------------------------------
如上