搜索
aardio官方社区 门户 查看主题

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

发布者: langshen | 发布时间: 2018-6-6 11:50| 查看数: 259| 评论数: 2|帖子模式

  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没有带上?

最新评论

金满斗 发表于 2018-6-6 16:03:52
写cookies是服务器那边的事情,就是因为你已经写入成功,服务器收到了,它就不会再次下发写cookie事件了。并不是每次访问服务器都会写cookie的。
langshen 发表于 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, 2018-6-25 18:12 , Processed in 0.062500 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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