关于Cookie一些思考

我们的系统使用截图方式获取验证码一直不靠谱,偶尔会报错。为了彻底解决这个问题,想着可以使用发送请求方式直接获取验证码。但是,又出现了新问题,对方服务器一直返回“验证码失效的错误”,弄了很久,最后发现,问题出在cookie的处理上。
获取验证码请求会设置cookie。正常登陆过程,比如登陆页面的webBrowser初始cookie=ck_1,当发送验证码后,webBrowser页面cookie=ck_2。因为我们登录使用webBrowser模拟的方式,而获取验证码使用的http直接请求的方式,所以,发送验证码请求获取验证码图片,我们还需要将当前http返回的cookie写到webBrowser的对应cookie里。可以使用JS的方式:

"document.cookie= c.Name=escape(c.value)"

但是,这样就可以了吗?webBrowser是根据cookie的路径取相应的cookie再发送到服务器进行认证的,但是,上面并没有设置cookie路径,而默认路径是在当前目录下,并不一定是根目录。所以,还需要设置cookie路径:

"document.cookie= c.Name=escape(c.value);path=c.path"

只有cookie的name,path,domain这三个属性都相同,才会被覆盖。取cookie的时候会先尾匹配domian,然后前匹配path。所以,domin或path详细,当名称相同的时候会被优先使用。例如:

cookie_1:"document.cookie= name=sb1;path=/domain=csdn.net"
cookie_2:"document.cookie= name=sb1;path=/tt;domain=csdn.net"

同时存在的时候,会使用cookie_2的值。
可以通过设置cookie有效期,Expire time/Max-age属性,来删除对应的cookie.
使用fiddler分析http请求的时候,有的cookie后面有HTTP-Only标志,这是为了防止窃取cookie的安全机制,设置HTTP-Only后,使用JS不能访问该cookie。
一旦cookies通过Javascript设置后遍不能提取它的选项,所以你将不会知道domain,path,expiration日期或secure标记。因此分析request的cookie的时候,我们只能看到cookie的name和value.

参考资料:

  1. http://www.dannysite.com/blog/77/
  2. http://blog.csdn.net/fangaoxin/article/details/6952954
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值