zoukankan      html  css  js  c++  java
  • (转) httpclient对cookie的处理

    session的保持是通过cookie来维持的,所以如果用户有勾选X天内免登录,这个session 就X天内一直有效,就是通过这个cookie来维护。如果没选X天内免登录,基本上就本次才能保持session,下次打开浏览器就要重新登录了。 
    所以在web安全里,黑客通过XSS,最终目的就是获取cookie,从免登录直接进入系统。 

    这次要讲的是,得到用户cookie后,免登录,用HttpClient 保持原来session访问原本一定要登录才能做的事。 

    HttpClient 4.x 库可以自己处理Cookie 
    有两咱广度可以添加cookie, 
    1.通过  httpclient.setCookieStore(cookieStore) 
    2.通过  httpGet 或者 httpPost 的addHeader(new BasicHeader("Cookie",cookie)); 


    第一种, 
    HttpClient是否在下次请求中携带从服务器端请求来的Cookie,完全是由设置决定的。 

    httpclient.getParams.setParameter(ClientPNames.COOKIE_POLICY, CookiePolicy.BEST_MATCH) 或者 CookiePolicy.BROWSER_COMPATIBILITY 
    如果设置为Cookie策略为BEST_MATCH,或BROWSER_COMPATIBILITY的话,HttpClient会在请求中携带由服务器返回的Cookie。如果不设置,应该需要手动添加了CookieStore,才会保持sesson. 

    如果设置为Cookie策略为默认的话,没设置,则需要手动通过 
    httpclient.setCookieStore(cookieStore); 去设置. 

    注:如果用的是同一个HttpClient(上下两个请求用同一个httpclient对象。 
    且没去手动连接放掉client.getConnectionManager().shutdown(); )! 
    都不用去设置cookie的ClientPNames.COOKIE_POLICY。httpclient都是会保留cookie的! 


    第二种, 
    通过Header去设置cookie,这种方法,就是今天要用的应用场景, 
    我们得到一个登录的cookie,免登录访问。 
    可以用浏览器登录,然后f12通过console 执行 document.cookie 得到cookie, 
    用这个cookie ,在访问时,设置  httpGet 或者 httpPost 的addHeader(new BasicHeader("Cookie",cookie));就可以免登录访问。 


    这种场景我用来用第一种方法,设置没成功,可能是因为用第一种时,没设置path,domain,expire 的原因,我猜的。 

    这种场景可以解决第一次登录也需要验证码的网站。没有登录就没办法发布或刷新信息。 
    如赶集网。

  • 相关阅读:
    error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
    E: 无法获得锁 /var/lib/apt/lists/lock
    卸载nginx
    服务器文件传输
    一些重要的sql命令
    设置某个字段的值是唯一的
    mysql注释的方法
    认证 (authentication) 和授权 (authorization) 的区别
    neutron_lib: 一个进程内的发布与订阅
    人工智能导论作业
  • 原文地址:https://www.cnblogs.com/tzhyy/p/9317367.html
Copyright © 2011-2022 走看看