使用CookieHandler管理Cookie数据

前言 : 因为只学过J2SE部分,对JAVA网络编程也不甚了解,所以学习在JAVA操作HTTP协议时碰到很多问题.翻译这篇文章只是为了加深理解,如有不当,还望指出.

原文地址: http://java.sun.com/developer/JDCTechTips/2005/tt0913.html

 

     在JAVA平台,访问URL资源是通过一系列协议处理器(protocol handler)来实现的.URL的起始部分指定了URL使用的协议.比如某个URL是以file:开头的,这表明这个URL资源是保存在本地文件系统的.J2SE5.0定义了几个必须实现的协议:http,https,file,jar.
     作为http协议处理器实现的一部分,J2SE5.0增加了一个CookieHandler.这个类提供了一些用于管理cookies的接口.Cookie是保存在浏览器缓存中的一小块数据.当你访问一个网站然后再次访问的时候,这个cookie数据用于鉴别你的身份.Cookies能够用于保存信息,譬如一个在线商店用于保存以购商品信息.Cookie可以是短期的,为一个单独的web事务保存数据,直到关闭浏览器;也可以是长期的,保存数据一个星期或一年.
在J2SE5中并没有设置默认的CookieHandler.不过你可以注册一个Handler以便程序能够保存cookies并且在http连接的时候得到这些cookies.
     回到CookieHandler这个类,这是个具有两组相关联方法的抽象类.第一组方法让你能得到当前已经设置的Handler或设置你自己的Handler:
        * getDefault()
        * setDefault(CookieHandler)

    对于安装了安全管理器的应用来说,得到或设置handler需要特别的权限.通过设置handler为null可以清除当前设置的handler.正如之前提到的,没有设置默认的handler.
第二组方法允许你从一个你维持的cookie缓存得到cookies,或将cookies保存到这个cookie缓存.
        * get(URI uri,Map<String,List<String>>requestHeaders)
        * put(URI uri,Map<String,List<String>>responseHeaders)

    get()方法从cookie缓存中的到之前保存的cookie并保存到requestHeaders中.put()方法从response headers 中提取cookies并保存到cookie缓存.
    这看起来很简单,事实创建一个handler确实如此.但定义cookie缓存需要做更多的事情.作为示范,我们写一个自己的CookieHandler,cookie缓存以及一个测试程序.这里是测试程序的雏形:[注 1]
  

java 代码
   import  java.io.*;      import  java.net.*;      import  java.util.*;         public   class  Fetch {        public   static   void  main(String args[])  throws  Exception {          if  (args.length ==  0 ) {            System.err.println("URL missing" );            System.exit(-1 );          }          String urlString = args[0 ];          CookieHandler.setDefault(new  ListCookieHandler());          URL url = new  URL(urlString);          URLConnection connection = url.openConnection();          Object obj = connection.getContent();          url = new  URL(urlString);          connection = url.openConnection();          obj = connection.getContent();        }      }  


    这个程序首先建立并安装了一个ListCookieHandler类(这个类的定义将在后面给出).然后打开了一个到URL(由命令行参数给出)的连接,并且读取其内容.再次打开另一个到URL的连接,并读取相同的内容.当第一次读取连接内容时,响应中包含的cookies将会被保存,第二次连接请求中就会包含这些保存的cookies.
下面我们来看这些是如何通过URLConnection类实现的.在建立了一个表示网络资源的URL后,我们可以用URLConnection来得到与该网站通信的输入流与输出流.
   String urlString = ...;
   URL url = new URL(urlString);
   URLConnection connection = url.openConnection();
   InputStream is = connection.getInputStream();
   // .. read content from stream


    这个连接中的信息可能有一部分是属于报文头,这与所用的协议有关.我们可以通过URLConnection来得到这些报文头消息,这个类提供了一些能提取报文头信息的方法,包括:
     *  getHeaderFields() - Gets a Map of available fields.
     *  getHeaderField(String name) - Gets header fields by name.
     *  getHeaderFieldDate(String name, long default) - Gets the header field as a date.
     *  getHeaderFieldInt(String name, int default) - Gets the header field as a number.
     *  getHeaderFieldKey(int n) or getHeaderField(int n) - Gets the header field by position.


    作为一个示例,下面的程序将指定URL的所有报文头消息列出:
  
java 代码
   import  java.net.*;      import  java.util.*;         public   class  ListHeaders {        public   static   void  main(String args[])  throws  Exception {          if  (args.length ==  0 ) {            System.err.println("URL missing" );          }          String urlString = args[0 ];          URL url = new  URL(urlString);          URLConnection connection = url.openConnection();          Map<String,List<String>> headerFields =            connection.getHeaderFields();          Set<String> set = headerFields.keySet();          Iterator itor = set.iterator();          while  (itor.hasNext()) {            String key = itor.next();            System.out.println("Key: "  + key +  " / "  +              headerFields.get(key));          }        }      }  


    这个程序用一个URL作为参数(比如:http://java.sun.com),然后将从该网站返回的所有报文头消息列出,每一个报头用如下格式显示:
     Key: <key> / [<value>]
    如果你输入:
     >> java ListHeaders http://java.sun.com
    你将会看到与下面类似的输出:
   Key: Set-Cookie / [SUN_ID=192.168.0.1:269421125489956; EXPIRES=Wednesday, 31- Dec-2025 23:59:59 GMT; DOMAIN=.sun.com; PATH=/]
   Key: Set-cookie / [JSESSIONID=688047FA45065E07D8792CF650B8F0EA;Path=/]
   Key: null / [HTTP/1.1 200 OK]
   Key: Transfer-encoding / [chunked]
   Key: Date / [Wed, 31 Aug 2005 12:05:56 GMT]
   Key: Server / [Sun-ONE-Web-Server/6.1]
   Key: Content-type / [text/html;charset=ISO-8859-1]


      这些输出只包含URL的报头,并没有包括这个URL指向的HTML页面.你可能注意到这些输出信息里面包含了这个URL站点所用的web服务器以及其日期时间.同意可以看到里面包含了两行Set-Cookie,这就是报头里面携带的cookies.这些cookie能够保存下来,然后在下一次请求的时候被发送.
    下面我们来建立一个CookieHandler,我们得实现CookieHandler的两个抽象方法:get()与put():
         *  public void put( URI uri,  Map<String, List<String>> responseHeaders) throws IOException
    *  public Map<String, List<String>> get(URI uri, Map<String, List<String>> requestHeaders) throws IOException


其中put()方法将所有报头中的cookies保存到一个缓存中.为了实现put()方法,首先要从responseHeaders中得到"Set-Cookie"对应的List.
     List<String> setCookieList =
        responseHeaders.get("Set-Cookie");

当你得到cookies对应的List,将List中所有的值保存下来.如果这个cookie已经存在,就将已保存的替换掉:
java 代码
    if  (setCookieList !=  null ) {         for  (String item : setCookieList) {           Cookie cookie = new  Cookie(uri, item);           // Remove cookie if it already exists in cache            // New one will replace it            for  (Cookie existingCookie : cache) {             ...           }           System.out.println("Adding to cache: "  + cookie);           cache.add(cookie);         }       }  

    这里的"cache"可以是一个数据库或者是一个Collections Framework中的List.其中的Cookie类将在下面定义.从本质上说,这些就是put()方法所要做的事:对于响应报头中每一个cookie,这个方法将cookie保存到缓存中.
    而get()方法做的是相反的事情:将缓存中所有与URI匹配cookie添加到请求报头中,如果存在多个cookie,则建立一个用','分隔的列表.方法get()返回一个Map,而且用一个包含已有报文头的map作为参数,你应该将cookie缓存与之相匹配的cookie添加这个map里面去,但是这个Map是只读的,所以你应该首先新建另一个map,并将参数map中的内容复制过去,然后再将cookie添加进去,最后返回一个只读的map.[注 2]
    为了实现get()方法,首先要从cookie缓存中查找与URI相匹配的cookie,然后删除那些已经过期的cookie:
java 代码
    // Retrieve all the cookies for matching URI        // Put in comma-separated list        StringBuilder cookies = new  StringBuilder();       for  (Cookie cookie : cache) {         // Remove cookies that have expired          if  (cookie.hasExpired()) {           cache.remove(cookie);         } else   if  (cookie.matches(uri)) {           if  (cookies.length() > 0 ) {             cookies.append(", " );           }           cookies.append(cookie.toString());         }       }  

    
    这里简单说明一下Cookie类,上面代码中用到了Coookie类的两个方法:hasExpired()和matches().hasExpired()方法用于表明这个cookie是否已经过期;而matches()方法用于检验这个cookie与某个URI是否匹配.
    get()方法余下部分将上面的StringBuilder中的文本添加到一个Map中,与之对应的key为"Cookie"
java 代码
// Map to return    Map<String, List<String>> cookieMap =     new  HashMap<String, List<String>>(requestHeaders);      // Convert StringBuilder to List, store in map    if  (cookies.length() >  0 ) {     List<String> list =       Collections.singletonList(cookies.toString());     cookieMap.put("Cookie" , list);   }   return  Collections.unmodifiableMap(cookieMap);  

    
    下面是CookieHandler的完整实现,里面添加了一些输出语句用于观察运行时刻的信息:
java 代码
  import  java.io.*;     import  java.net.*;     import  java.util.*;        public   class  ListCookieHandler  extends  CookieHandler {          // "Long" term storage for cookies, not serialized so only        // for current JVM instance        private  List<Cookie> cache =  new  LinkedList<Cookie>();          /**        * Saves all applicable cookies present in the response        * headers into cache.        * @param uri URI source of cookies        * @param responseHeaders Immutable map from field names to        * lists of field        *   values representing the response header fields returned        */           public   void  put(           URI uri,           Map<String, List<String>> responseHeaders)             throws  IOException {            System.out.println("Cache: "  + cache);         List<String> setCookieList =           responseHeaders.get("Set-Cookie" );         if  (setCookieList !=  null ) {           for  (String item : setCookieList) {             Cookie cookie = new  Cookie(uri, item);             // Remove cookie if it already exists              // New one will replace              for  (Cookie existingCookie : cache) {               if ((cookie.getURI().equals(                 existingCookie.getURI())) &&                  (cookie.getName().equals(                    existingCookie.getName()))) {                cache.remove(existingCookie);                break ;              }            }            System.out.println("Adding to cache: "  + cookie);            cache.add(cookie);          }        }      }         /**       * Gets all the applicable cookies from a cookie cache for       * the specified uri in the request header.       *       * @param uri URI to send cookies to in a request       * @param requestHeaders Map from request header field names       * to lists of field values representing the current request       * headers       * @return Immutable map, with field name "Cookie" to a list       * of cookies       */          public  Map<String, List<String>> get(          URI uri,          Map<String, List<String>> requestHeaders)            throws  IOException {           // Retrieve all the cookies for matching URI         // Put in comma-separated list         StringBuilder cookies = new  StringBuilder();        for  (Cookie cookie : cache) {          // Remove cookies that have expired           if  (cookie.hasExpired()) {            cache.remove(cookie);          } else   if  (cookie.matches(uri)) {            if  (cookies.length() >  0 ) {              cookies.append(", " );            }            cookies.append(cookie.toString());          }        }           // Map to return         Map<String, List<String>> cookieMap =          new  HashMap<String, List<String>>(requestHeaders);           // Convert StringBuilder to List, store in map         if  (cookies.length() >  0 ) {          List<String> list =            Collections.singletonList(cookies.toString());          cookieMap.put("Cookie" , list);        }          System.out.println("Cookies: "  + cookieMap);      return  Collections.unmodifiableMap(cookieMap);      }    }  

 
      到这里,我们的工作只剩下Cookie类的实现了.这个工作的重头戏在其构造函数部分,你需要从URI以及报文头里面解析出所需要的信息.其中的cookie有效日期信息的格式是确定的,但其它信息对不同的网站有不同的格式.不过这也没有什么困难的,只需要把cookie路径,有效日期,域名这些信息保存下来就是了.
java 代码
 public  Cookie(URI uri, String header) {     String attributes[] = header.split(";" );     String nameValue = attributes[0 ].trim();     this .uri = uri;     this .name = nameValue.substring( 0 , nameValue.indexOf('='));     this .value = nameValue.substring(nameValue.indexOf('=')+ 1 );     this .path =  "/" ;     this .domain = uri.getHost();        for  ( int  i= 1 ; i < attributes.length; i++) {       nameValue = attributes[i].trim();       int  equals = nameValue.indexOf('=');       if  (equals == - 1 ) {         continue ;       }       String name = nameValue.substring(0 , equals);       String value = nameValue.substring(equals+1 );       if  (name.equalsIgnoreCase( "domain" )) {         String uriDomain = uri.getHost();         if  (uriDomain.equals(value)) {           this .domain = value;         } else  {           if  (!value.startsWith( "." )) {             value = "."  + value;           }           uriDomain =             uriDomain.substring(uriDomain.indexOf('.' ));           if  (!uriDomain.equals(value)) {             throw   new  IllegalArgumentException(               "Trying to set foreign cookie" );           }           this .domain = value;         }       } else   if  (name.equalsIgnoreCase( "path" )) {         this .path = value;       } else   if  (name.equalsIgnoreCase( "expires" )) {         try  {           this .expires = expiresFormat1.parse(value);         } catch  (ParseException e) {           try  {             this .expires = expiresFormat2.parse(value);           } catch  (ParseException e2) {             throw   new  IllegalArgumentException(               "Bad date format in header: "  + value);           }         }       }     }  

 
  Cookie类的其它方法只需要返回这些信息,或者检查有效日期就OK了:
java 代码
public   boolean  hasExpired() {     if  (expires ==  null ) {       return   false ;     }     Date now = new  Date();     return  now.after(expires);   }      public  String toString() {     StringBuilder result = new  StringBuilder(name);     result.append("=" );     result.append(value);     return  result.toString();   }  

   对于一个已经过期的cookie,其matchs方法总是返回false:

    public boolean matches(URI uri) {

     if (hasExpired()) {
       return false;
     }

     String path = uri.getPath();
     if (path == null) {
       path = "/";
     }

     return path.startsWith(this.path);
   }

   注意:Cookie规范中要求同时检查域名以及路径,为了简单起见,我们这里只检查了路径.
   这里是Cookie的完整定义:

java 代码
 
  1.    import  java.net.*;  
  2.    import  java.text.*;  
  3.    import  java.util.*;  
  4.   
  5.    public   class  Cookie {  
  6.   
  7.      String name;  
  8.      String value;  
  9.      URI uri;  
  10.      String domain;  
  11.      Date expires;  
  12.      String path;  
  13.   
  14.      private   static  DateFormat expiresFormat1  
  15.         = new  SimpleDateFormat( "E, dd MMM yyyy k:m:s 'GMT'" , Locale.US);  
  16.   
  17.      private   static  DateFormat expiresFormat2  
  18.         = new  SimpleDateFormat( "E, dd-MMM-yyyy k:m:s 'GMT'" , Locale.US);  
  19.           
  20.   
  21.      /**  
  22.       * Construct a cookie from the URI and header fields  
  23.       *  
  24.       * @param uri URI for cookie  
  25.       * @param header Set of attributes in header  
  26.       */   
  27.      public  Cookie(URI uri, String header) {  
  28.        String attributes[] = header.split(";" );  
  29.        String nameValue = attributes[0 ].trim();  
  30.        this .uri = uri;  
  31.        this .name =   
  32.          nameValue.substring(0 , nameValue.indexOf('='));  
  33.        this .value =   
  34.          nameValue.substring(nameValue.indexOf('=')+1 );  
  35.        this .path =  "/" ;  
  36.        this .domain = uri.getHost();  
  37.   
  38.        for  ( int  i= 1 ; i < attributes.length; i++) {  
  39.          nameValue = attributes[i].trim();  
  40.          int  equals = nameValue.indexOf('=');  
  41.          if  (equals == - 1 ) {  
  42.            continue ;  
  43.          }  
  44.          String name = nameValue.substring(0 , equals);  
  45.          String value = nameValue.substring(equals+1 );  
  46.          if  (name.equalsIgnoreCase( "domain" )) {  
  47.            String uriDomain = uri.getHost();  
  48.            if  (uriDomain.equals(value)) {  
  49.              this .domain = value;  
  50.            } else  {  
  51.              if  (!value.startsWith( "." )) {  
  52.                value = "."  + value;  
  53.              }  
  54.              uriDomain = uriDomain.substring(  
  55.                uriDomain.indexOf('.' ));  
  56.              if  (!uriDomain.equals(value)) {  
  57.                throw   new  IllegalArgumentException(  
  58.                  "Trying to set foreign cookie" );  
  59.              }  
http(S)系列之(五):android之HttpURLConnection源码解析(4):OkHttpClient之代理,Cookie,响应缓存 OkHttpClient做了很多事情:是否提供了代理,传递Cookie,响应缓存,添加SSL协议,校验服务器主机是否合法,数据库连接池等 Proxy和ProxySelector 代理服务器是介于客户端和服务器之间的一台服务区,设置了代理服务器之后。客户端请求先被送到代理服务器,由代理服务器向真正的Web服务器发送请求,并取回客户端所需要的消息,再送回给客户端。 由于大部分代理服务器具有缓冲的功能,它会不断地将新取得的数据存储到代理服务器的本地存储器上,如果客户端所请求的数据在它的本机的存储器上已经存在而 阅读详情

相关推荐

为什么我的Win11家庭版找不到BitLocker?教你两种强制关闭加密的隐藏方法

本文解释了Win11家庭版为何缺少BitLocker功能,并提供了两种强制关闭加密的隐藏方法。通过注册表修改和PowerShell命令,用户可以调出隐藏的加密控制面板或直接操控加密引擎,解决家庭版设备加密的管理难题。

weixin_42535703的博客 1780

java8 handler_CookieHandler 回调机制

# CookieHandler 回调机制HTTP 状态管理是通过 Java .net. cookiehandler 类在 Java SE 中实现的。CookieHandler 对象提供回调机制,以在 HTTP 协议处理程序中提供 HTTP 状态管理策略实现。也就是说,使用 HTTP 作为协议的 URL,例如 new URL(“http://example.com”),将使用 HTTP 协议处理程序...

weixin_42365141的博客 234

cMake编译 VS2026+opencv4.12.0+opencv_contrib-4.12.0

本文提供了OpenCV 4.12.0集成CUDA、cuDNN和ONNX Runtime的详细编译指南。主要步骤包括:准备Visual Studio 2026、CMake 4.2.0、CUDA 12.6和cuDNN 9.16.0;设置无空格和中文的路径结构;配置关键CMake变量(如开启CUDA支持、指定路径等);以及最终的编译安装过程。注意事项包括:版本一致性检查、cuDNN文件复制、国内用户需手动获取.cache文件等。文章还提供了常见问题解决方案,如通过设置CUDA_NVCC_FLAGS参数解决VS版本

weixin_46624734的博客 1385

android-CookieHandler、CookieManager

参考:Android中Cookie的使用通常来说,Http 请求 或者 返回,两两之间应该是相互独立的。然而,状态管理机制(the state management mechanism),可以使 客户端(clients) 和 服务器(servers)可以通过把这些信息放进一个上下文变量中来实现状态信息的交换,这种方式被称作 Session.这些被用来创建 和维护session的状态信息被称作 coo

火星男孩的分享空间 5738

ABB机器人与西门子PLC、工业相机联合实现无序抓取的完整调试方案

将此方案导入系统后,逐步执行调试,确保各环节信号正常触发,即可实现高效无序抓取!

CHUXUEZHE8210的博客 1996

AI 推理与服务(AI Inference and Serving)

AI 推理和服务是现代分布式系统中的重要组成部分。通过合理应用 AI 推理和服务的最佳实践,可以显著提高系统的智能性和用户体验。本章介绍了 AI 推理和服务的核心概念、最佳实践以及在分布式系统中的应用,希望这些内容能帮助您构建更智能、更高效的分布式系统。

蜗牛沐雨 1387

Java的CookieManager

Java5包括一个抽象类Java.net.CookieHandler,它定义了存储和获取Cookie的一个API,但不包括这个抽象类的实现,所以还有很多工作要做。Java6进一步作了补充,为CookieManager增加了一个可以使用的具体子类java.net.CookieManager。不过默认情况下Cookie并不打开。在Java存储和返回Cookie之前,需要先启动cookie。

qq_43456605的博客 2759

告别手动改代码!用SSC工具5分钟搞定EtherCAT从站动态模块配置(含Excel模板)

本文详细介绍了如何利用SSC工具和Excel模板实现EtherCAT从站动态模块配置的自动化流程。通过零代码修改的动态配置方案,大幅提升工业自动化产线的灵活性和效率,配置时间从平均4小时缩短至8分钟,错误率下降96%。文章包含Excel模板设计、实战演示和避坑指南,助力工程师快速掌握这一高效工具。

weixin_28339967的博客 572

Android OkHttp的Cookie自动化管理

Android中在使用OkHttp这个库的时候,有时候需要持久化Cookie,那么怎么实现呢。OkHttp的内部源码过于复杂,不进行深究,这里只看其中的HttpEngineer里面的部分源码,在发起请求以及请求结束都会调用这个类的几个方法。我们先看networkRequest方法,在里面通过client.getCookieHandler()函数获得了CookieHandler对象,通过该对象拿到co

区长的专栏 2万+

ICC2: 如何让CTS指定pin多长指定长度

这里create_clock不需要写到sdc里,在脚本里写就行,需要注意的是脚本里存在remove_clock_tree的话,add_buffer就要放remove_clock_tree后面,或者给guide buffer设don't touch也行。跟innovus的操作逻辑一样,如果要让tree上的某一点长长,要先考虑这个点后面的clock tree能正常balance。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?-5意味着长长5ns,相反正值意味着做短。

m0_61544122的博客 686

openclaw-cn : 无法将“openclaw-cn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称 解决方案

本文主要介绍了openclaw-cn : 无法将“openclaw-cn”项识别为 cmdlet、函数、脚本文件或可运行程序的名称解决方案,希望能对使用openclaw-cn的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 10万+

使用CookieHandler和cookieManager在httpUrlConnection中自动处理cookie保持Session信息

CookieHandler在大多数情况下会自动处理您的cookie。要仅维护从一个请求到下一个请求的cookie(例如维护服务器会话),那么此代码行就足够了: CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL)); 确保在第一次向UrlConnection发出请求之前运行一次。 现在,零cookie管理,并且从请求到请求的所有服务器会话数据都得到了完美维护。 ...

allway2的博客 766

把 SAP ABAP BDC 跑得又快又稳:从 SHDB 录屏到可上线的批量上传程序(含 MM01 案例与源码)

SAP BDC批量数据迁移实践 摘要:本文介绍了SAP系统中BDC(Batch Data Communication)技术在数据迁移中的应用。文章首先对比了Session method和CALL TRANSACTION method两种实现方式的特点及适用场景,重点推荐使用Session method进行主数据批量处理。然后详细讲解了通过SHDB工具录制MM01事务创建物料主数据的完整流程,包括如何生成基础BDC代码。最后展示了将录制的脚本改造为可批量处理文件数据的实用程序,核心改动包括定义数据结构、读取文

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 324

网络——Cookie的使用

一、什么是Cookie ①、Cookie的作用:Cookie是服务端给客户端颁发的通行证,服务端通过Cookie来确认客户端的身份。这样当客户端操作时候,服务端知道具体修改哪个客户的数据。而不需要每次客户端在修改数据的时候,都要输入一遍,账号密码来认证自己。 ②、Cookie的传输: Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response

chen19960724的博客 942

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JavaSe:Cookie 管理的API介绍

CookieManager 在使用HttpURLConnection中,并没有关于Cookie的管理。如果使用Java程序时,怎么管理cookie呢? Cookie案例 1. User Agent -> Server POST /acme/login HTTP/1.1 [form data] 2. Server -> User Agent HTTP...

148

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

HttpURLConnection之Cookie传递 2021-01-05

HttpURLConnection之Cookie传递 摘要:本文主要介绍使用HttpURLConnection访问Miracle系统Cookie传递相关技术要点 关键词:HttpURLConnection;CookieHandler;Session; Cookie; 简介 我们知道HTTP协议是一种无状态协议,基于TCP/IP,即客户端请求服务器,服务器处理后,进行响应,这个过程是无状态的。 但是在有些时候需要保存一些客户端的请求信息,用以识别客户端的某些状态,有针对性的去保持某些客户端的习惯.

lwzh2009的专栏 1315

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

nanohttpd会话管理:Cookie与Session实现

在Web开发中,用户会话管理是构建交互式应用的基础。无论是记住用户登录状态还是保存购物车信息,都离不开Cookie和Session技术。nanohttpd作为一款轻量级Java HTTP服务器,提供了简洁而实用的会话管理机制。本文将深入解析nanohttpd中Cookie与Session的实现原理,并通过实例展示如何在实际项目中应用这些功能。 ## Cookie基础:客户端状态存储 Cooki...

gitblog_00404的博客 900

jQuery中使用cookie存储数据,用于保存token

创建一个cookie方法 /* *终端cookie缓存,键值对key=value;如果key的名称相同则会覆盖上一个值 *新增:cookieHandler.set("key1",value); *获取:cookieHandler.get("key1",defaultValue); *删除:cookieHandler.del("key1"); */ var cookieHandler = { path: "/", get: function(cookie_name, default_valu

weixin_47838176的博客 2777

Android中Cookie的使用

Working With Cookies或许你早已经了解过cookies,但是或许你还不知道怎样在Java应用程序中利用cookies的优势.这篇文章可以引导你深入理解cookies,并且告诉你怎样设置一个cookie handler来使 HTTP URL 网络连接使用到这些cookie.Java SE 提供了一个主要的类来实现这一功能,java.net.CookieHandler还有一些其他的辅助

初心 1万+

java cookiesmanager,java 模拟浏览器的cookie管理机制

cookie的格式cookie是一段文本,里面只能包含ascii字符,不能含有逗号和号,也就是说只能包含那128个字符的一些字符,不可能包含例如:‘中国’ 这种汉字cookie在http请求和响应中的形式在请求header中是:cookie 首部在响应中是set-cookie首部cookie的语法规则1、数据部分是名值对,k=v2、控制部分:过期日期、域、路径、端口、版本、安全选项。各个部分用分号...

weixin_36377516的博客 849

使用Jmeter登录WordPress的问题(Cookie管理)

1. 背景简介 最近在开始对Xen/KVM的嵌套虚拟化(nested virtualization)做一些性能测试并收集一些性能数据,以便证明各种特性(如virtual EPT、VMCS shadowing等)在嵌套虚拟化中带来的性能提高。其中,我们还考虑到当前Web应用服务器是使用虚拟化技术的一个重要方面,所以专门设计了对Web应用的性能测试。对于我们俩这样做虚拟化团队来说,平时是没有什么特别

Elvis_lfc的博客 2097

jmeter学习指南之深入分析跨域传递cookie

继上篇文章中介绍了Jmeter cookie manager的两种常用使用情况:jmeter视频:https://edu.51cto.com/course/14305.html同一线程组和不同线程组间传递cookie;前些天在工作中又遇到了cookie的跨域使用问题,调试了好久才调好,查了很多资料,从cookie的实现原理到SSO单点登录到SSO实现方式,再到session、...

weixin_34007291的博客 451

Android 使用Okhttp/Retrofit持久化cookie的简便方式

首先cookie是什么就不多说了,还是不知道的话推荐看看这篇文章 Cookie/Session机制详解 深入解析Cookie技术 为什么要持久化cookie也不多说了,你能看到这篇文章代表你有这个需求。 cookie简单来说就是服务器在客户端中保存的键值对,比如说早期的购物车,保持登陆状态都是使用的cookie。 但是cookie的功能是依赖于浏览器的,大多数浏览器都有管理cookie的功能。...

weixin_34261415的博客 144

java之cookie

  package test;   import java.util.Hashtable;   import java.util.Iterator;   import java.util.Set;   import javax.servlet.http.Cookie;   import javax.servlet.http.HttpServletRequest;   impor...

feelxing的专栏 181
上一篇: 浅谈HTTP的无状态性
下一篇: 二维点集的凸包及其直径(1)
JavaSxy
博客等级 码龄21年 1粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值