首页->正文

一则cookie引起的问题

2011-06-03 -Web开发 标签: php

一个内部项目中,需从某接口获取登录信息。目的是为了实现多帐号的自由切换,但发现用帐号a登录后,用b帐号再登录,接口返回的验证信息仍然为a登录成功的信息。而通过curl发送b帐号的登录信息,返回的却是b的登录成功。

所以怀疑是本地cookie导致,因此在发送请求前把本地cookie做了统一清除处理,但仍然返回的是a的信息。再细想,接口的地址是以IP地址形式请求的,更不可能发送本域名下的cookie信息了。

看来只能逐行对比接口返回的header了,果然有一项Set-Cookie:.......

当浏览器首次请求时会记录下此cookie,当用b账号请求时,会发送上次在接口地址下获得的cookie,也就导致了浏览器下请求接口返回a的登录信息(当然,这和接口端的实现关系很大,明显是首先判定session了)。而curl默认下是不发送cookie的,所以curl下是正常的。

知道了原因那就好处理了。但无奈的是,接口是通过URL跳转(302)方式请求的(接口暴露,很危险啊!幸亏是内网),所以请求前无法清除跨域名下的cookie。

咋办?刚才提到的curl方式(curl没安装的话,fsockopen也可以,file_get_contents应该也可以,你可以研究研究),读取header部分中的Location内容,ok,解决问题。

怎么查看响应头信息呢?
firebug最方便了,直接浏览器中查看,或者命令行中curl -I "http://www.yourdomain.com/",还或者wget -S --spider http://localhost/

最后总结,熟悉http协议是非常必须的!
推荐本书:http://www.amazon.cn/HTTP-The-Definitive-Guide-Totty-Brian/dp/1565925092 (真够贵的,320多……貌似是$直接换算的)
RTFM:http://www.w3.org/Protocols/rfc2616/rfc2616.html

注:fsockopen和file_get_contents系php下的函数

下一篇 熟悉或/与/位移操作符

上一篇 Windows 7 64位下php为何加载慢

相关文章

Ubuntu下编译安装PHP

使用curl_multi_init并发请求

php增加Last-Modified为何无效

用xhprof分析php代码

正则修饰符m和s用法

文章分类

开发小提示

  • 1:Mongodb中通过db.yourCollectionName. dataSize()查看某个文档的大小
  • 2:linux下用reset命令恢复查看二进制文件导致的命令行乱码
  • 3:查看MySQL表的索引情况show index from tableName
  • 更多...

交流

  • wangnow(a)126.com