aardio 官方社区

 找回密码
 注册会员

QQ登录

只需一步,快速开始

搜索
查看: 12763|回复: 2

关于COOKIES获取和设置的问题。

[复制链接]

1

主题

1

回帖

21

积分

新手入门

积分
21
发表于 2018-6-6 11:50:32 | 显示全部楼层 |阅读模式
  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=759;bottom=469)
  4. winform.add(
  5. button={cls="button";text="button";left=138;top=164;right=245;bottom=225;z=1};
  6. button2={cls="button";text="button2";left=350;top=180;right=519;bottom=262;z=2}
  7. )
  8. /*}}*/

  9. import inet.whttp;
  10. import console;
  11. var cookies = '';
  12. winform.button.oncommand = function(id,event){
  13.         whttp  = inet.whttp();
  14.         whttp.afterSend = function(statusCode,contentLength){whttp.readHeader();}
  15.         var str = whttp.get("https://tos.link/captcha.html");
  16.         cookies = whttp.readHeader("Set-Cookie:");
  17.         console.log(cookies);
  18. }

  19. winform.button2.oncommand = function(id,event){
  20.         whttp  = inet.whttp();
  21.         whttp.beforeSend = function(){whttp.writeHeader("Set-Cookie: " ++ cookies);}
  22.         whttp.afterSend = function(statusCode,contentLength){whttp.readHeader();}
  23.         var str = whttp.get("https://tos.link/captcha.html");
  24.         cookies = whttp.readHeader("Set-Cookie:");
  25.         console.log(cookies);
  26. }

  27. winform.show();
  28. win.loopMessage();
复制代码



先按第一个按钮,打印的cookies,传给第二个按钮里的whttp,发现第二个按钮里的cookies已经变了。这是为什么呢?

换个方式:

  1. import win.ui;
  2. /*DSG{{*/
  3. var winform = win.form(text="aardio form";right=759;bottom=469)
  4. winform.add(
  5. button={cls="button";text="button";left=138;top=164;right=245;bottom=225;z=1};
  6. button2={cls="button";text="button2";left=350;top=180;right=519;bottom=262;z=2}
  7. )
  8. /*}}*/

  9. import inet.whttp;
  10. import console;

  11. var cookies = '';
  12. whttp  = inet.whttp();
  13. whttp.beforeSend = function(){
  14.         a = whttp.writeHeader("Set-Cookie: " ++ cookies);
  15.         console.log(cookies,a);
  16. }
  17. whttp.afterSend = function(statusCode,contentLength){whttp.readHeader();}
  18.        
  19. winform.button.oncommand = function(id,event){
  20.         var str = whttp.get("https://tos.link/captcha.html");
  21.         cookies = whttp.readHeader("Set-Cookie:");
  22.         console.log(cookies);
  23. }

  24. winform.button2.oncommand = function(id,event){
  25.         var str = whttp.get("https://tos.link/captcha.html");
  26.         cookies = whttp.readHeader("Set-Cookie:");
  27.         console.log(cookies);
  28.        
  29. }

  30. winform.show();
  31. win.loopMessage();
复制代码


如果两个按钮共用一个whttp,第一个按钮得到cookies,第二按钮设置cookies时,也提示成功了,但返回的cookies是空的。
这又是为什么呢?是不是第二个按钮的cookies没有带上?

12

主题

68

回帖

809

积分

培训班

积分
809
QQ
发表于 2018-6-6 16:03:52 | 显示全部楼层
写cookies是服务器那边的事情,就是因为你已经写入成功,服务器收到了,它就不会再次下发写cookie事件了。并不是每次访问服务器都会写cookie的。

1

主题

1

回帖

21

积分

新手入门

积分
21
 楼主| 发表于 2018-6-6 22:22:15 | 显示全部楼层
找到问题原因了,
whttp.beforeSend = function(){whttp.writeHeader("Set-Cookie: " ++ cookies);}
在第二步带走cookies的时候,这一句应该是:
whttp.beforeSend = function(){whttp.writeHeader("Cookie: " ++ cookies);}

这个功能就是利用whttp独立cookies的特性,每次请求都是新的,只有带上上一步的cookies,才是同一个session下的请求。多号独立登录,独立分步操作,很有用处,什么时候需要登录状态,就带上cookies.

还有个疑问,如果是多个Set-Cookie:,会不会自动全部带上呢?暂时没有遇到这种情况,所以就没改进了。
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|aardio.com|aardio 官方社区 ( 皖ICP备09012014号 )

GMT+8, 2025-3-21 15:10 , Processed in 0.079656 second(s), 23 queries .

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表