java cookie的编辑 修改 删除等用法

Cookie是WEB服务器通过浏览器保存在WWW用户端硬盘上的一个文本文件,这个文本文件中包含了文本信息。

   文本信息的内容以“名/值”对(key/value)的形式进行存储。

   可以让WEB开发者通过程序读写这个文本文件。

   XP中保存Cookie的目录是“C://Documents and Settings用户名Cookies”

Cookie的作用

   解决浏览器用户与Web服务器之间无状态通信。
//创建对象

import java.net.CookieHandler;
import java.net.CookieManager;
import java.net.CookieStore;
import java.net.HttpCookie;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;

public class FetchCookie {
  public static void main(String args[]) throws Exception {
    String urlString = "http://www.111cn.net/58/";
    CookieManager manager = new CookieManager();
    CookieHandler.setDefault(manager);
    URL url = new URL(urlString);
    URLConnection connection = url.openConnection();
    Object obj = connection.getContent();
    url = new URL(urlString);
    connection = url.openConnection();
    obj = connection.getContent();
    CookieStore cookieJar = manager.getCookieStore();
    List<HttpCookie> cookies = cookieJar.getCookies();
    for (HttpCookie cookie : cookies) {
      System.out.println(cookie);
    }
  }
}

综合实例

        Date date = new Date() ;

        Cookie c = new Cookie("lastVisited",date.toString()) ;

//设定有效时间  以s为单位

        c.setMaxAge(60) ;

//设置Cookie路径和域名

        c.setPath("/") ;

        c.setDomain(".zl.org") ;  //域名要以“.”开头

//发送Cookie文件

        response.addCookie(c) ;

//读取Cookie

        Cookie cookies[] = request.getCookies() ;

        Cookie c1 = null ;

        if(cookies != null){

            for(int i=0;i<cookies.length;i++){

               c1 = cookies[i] ;

               out.println("cookie name : " + c1.getName() + "   ") ;

               out.println("cookie value :" + c1.getValue() + "<br>");

            }

        }

  //修改Cookie

       Cookie cookies[] = request.getCookies() ;

       Cookie c = null ;

       for(int i=0;i<cookies.length;i++){

           c = cookies[i] ;

           if(c.getName().equals("lastVisited")){

              c.setValue("2010-04-3-28") ;

              c.setMaxAge(60*60*12) ;

              response.addCookie(c) ;     //修改后,要更新到浏览器中    

           }

       }

 

//删除Cookie,(将Cookie的有效时间设为0)

   

    Cookie cookies[] = request.getCookies() ;

       Cookie c = null ;

       for(int i=0;i<cookies.length;i++){

           c = cookies[i] ;

           if(c.getName().equals("lastVisited")){

              c.setMaxAge(0);

              response.addCookie(c) ;

           }

       }

 

使用Cookie的注意事项
·Cookie的大小和数量是有限制的。

·Cookie在个人硬盘上所保存的文本信息是以明文格式进行保存的,没有任何的加密措施。

·浏览器用户可以设定不使用Cookie。

5、实例:Servlet中的Cookie编

实例

import java.io.IOException;
import java.net.CookieHandler;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;

public class Fetch5 {
  public static void main(String args[]) throws Exception {
    String urlString = "java.sun.com";
    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();
  }
}

class ListCookieHandler extends CookieHandler {
  private List<Cookie> cookieJar = new LinkedList<Cookie>();

  public void put(URI uri, Map<String, List<String>> responseHeaders) throws IOException {
    List<String> setCookieList = responseHeaders.get("Set-Cookie");
    if (setCookieList != null) {
      for (String item : setCookieList) {
        Cookie cookie = new Cookie(uri, item);
        for (Cookie existingCookie : cookieJar) {
          if ((cookie.getURI().equals(existingCookie.getURI()))
              && (cookie.getName().equals(existingCookie.getName()))) {
            cookieJar.remove(existingCookie);
            break;
          }
        }
        cookieJar.add(cookie);
      }
    }
  }

  public Map<String, List<String>> get(URI uri, Map<String, List<String>> requestHeaders)
      throws IOException {
    StringBuilder cookies = new StringBuilder();
    for (Cookie cookie : cookieJar) {
      // Remove cookies that have expired
      if (cookie.hasExpired()) {
        cookieJar.remove(cookie);
      } else if (cookie.matches(uri)) {
        if (cookies.length() > 0) {
          cookies.append(", ");
        }
        cookies.append(cookie.toString());
      }
    }

    Map<String, List<String>> cookieMap = new HashMap<String, List<String>>(requestHeaders);

    if (cookies.length() > 0) {
      List<String> list = Collections.singletonList(cookies.toString());
      cookieMap.put("Cookie", list);
    }
    System.out.println("CookieMap: " + cookieMap);
    return Collections.unmodifiableMap(cookieMap);
  }
}

class Cookie {

  String name;

  String value;

  URI uri;

  String domain;

  Date expires;

  String path;

  private static DateFormat expiresFormat1 = new SimpleDateFormat("E, dd MMM yyyy k:m:s 'GMT'",
      Locale.US);

  private static DateFormat expiresFormat2 = new SimpleDateFormat("E, dd-MMM-yyyy k:m:s 'GMT'",
      Locale.US);

  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);
          }
        }
      }
    }
  }

  public boolean hasExpired() {
    if (expires == null) {
      return false;
    }
    Date now = new Date();
    return now.after(expires);
  }

  public String getName() {
    return name;
  }

  public URI getURI() {
    return uri;
  }

  public boolean matches(URI uri) {

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

    return path.startsWith(this.path);
  }

  public String toString() {
    StringBuilder result = new StringBuilder(name);
    result.append("=");
    result.append(value);
    return result.toString();
  }
}

时间: 2024-09-12 08:36:33

java cookie的编辑 修改 删除等用法的相关文章

JS控制Cookie,实现增加修改删除函数

说实在,我都是习惯用session,但有些时候还是不得不使用cookie,关于两者的不同,简单说就存放一个在服务器一个存放在本地,更多说明请Goolge一下. js设置cookie有很多种方法,下面说几种: 第一种:(这个是w3c官网的代码) <script> //设置cookie function setCookie(cname, cvalue, exdays) {     var d = new Date();     d.setTime(d.getTime() + (exdays*24*

mysql数据操作插入 查询 修改 删除命令用法

insert添加数据 前面我们学习了数据库,数据库表,接下来我们学习一下操作表中的数据. 让我们开始利用 insert 语句来增加记录,这是一个 SQL 语句,需要为它指定希望插入数据行的表或将值按行放入的表.如果你设置了主键并且自动增长,添加的时候需要把对应的主键值设置为null或者数字"0". 基本语法: insert [into] tbl_name [(col_name,...)] VALUES (pression,...) insert [into] tbl_name SET

execl2010修改与删除-文件共享(可编辑不可删除)2003版Execl能实现,2010版无法实现,就如何处理。

问题描述 文件共享(可编辑不可删除)2003版Execl能实现,2010版无法实现,就如何处理. 一个共享文件,里面的Execl表格要求能多用户编辑并保存,但非主机用户不能删除,通过下面操作,2003版的可以实现,而2010版的则边主机都没法保存.操作如下:说明:两种权限组合时,取最小值.这样用户可以修改文件内容,但不可删除文件,不可更改文件名.或许可以看一下excel的"共享文件簿"功能,有更好的解决方法一个文件夹名为test有一个用户名为everyone要使everyone可以修改

Java插入修改删除数据库数据的基本方法_java

Java数据库之插入记录 插入数据表记录有3种方案 一.使用Statement对象 实现插入数据表记录的SQL语句的语法是: insert into 表名(字段名1,字段名2,--)value (字段值1,字段值2,--) 例如:   insert into ksInfo(考号,姓名,成绩,地址,简历)value('200701','张大卫'534,'上海欧阳路218弄4-1202','') 实现同样功能的Java程序代码是: sql = "insert intoksIno(考号,姓名,成绩,地

java代码-怎么通过点击按钮实现重命名编辑修改文字

问题描述 怎么通过点击按钮实现重命名编辑修改文字 请问下这代码怎么写: 点击按钮实现重命名编辑!大神们,帮解答!蟹蟹了 解决方案 通过按键控件的 setText 成员函数来设置. 解决方案二: 先获得这个控件然后加setOnClicker监听函数,里面用setText函数来改变文字. 解决方案三: 1.获取Button控件.TextView控件,并设置监听器 mTextView=(TextView)findViewById(R.id.textView1); mButton=(Button)fin

java-求解Java中import和package的各种用法

问题描述 求解Java中import和package的各种用法 不同目录下的Java文件,每个文件我都给建立了一个包,在其中一个Java文件中访问另一个的时候,import了另一个包,并且也修改了环境变量,把另一个包所在的目录加了进去,结果编译还是错误,说是找不到那个包,包这块还是挺混乱的,哪位给讲讲,请不吝赐教,能不能很系统全面的给说说 解决方案 java中import,package的用法JAVA 中import和 package的用法java中import,package的用法 解决方案二

发布网站后gridview自带的编辑和删除功能没法用,求解决

问题描述 发布网站后,发现gridview上自带的编辑和删除没法用,不知道怎么回事,如果改成程序的话行不行?求大神帮忙 解决方案 解决方案二:检查一下服务器的.net环境是否安装正确.解决方案三:GridView控件实现编辑.删除功能示例//GridView编辑.删除设置<asp:GridViewID="ClassList"runat="server"AutoGenerateColumns="False"CellPadding="

编程-一个用java操作文件并修改文件的内容的问题

问题描述 一个用java操作文件并修改文件的内容的问题 假设一个项目里有n个文件,n个文件中有n个无用的注释,这些注释都是这种格式的 /*无效资源开始 System.out.println("无效的内容"); 无效资源结束*/ 怎么才能通过java,把这些注释都删除掉? 解决方案 大概思路:以一个文件为例,依次读出文件中的内容,检查以"/*"开始,以"*/"结束的字符串,如果和给定注释内容相同就删除注释,至于程序,慢慢斟酌吧. 解决方案二: 正则

net_lover,专家,您好! 请问DataGridView编辑修改完后,提交到DataSet的正确写法是怎样?

问题描述 我想问一下,在.NET中程序用分层法来,建了一个DataAccess层,数据处理都在里面,包括DataSet(DataSet是自己写的),现在想在界面层里编辑DataGridView控件中的数据,然后通过DataGridView提交到DataSet后再提交给数据库进行更新.//显示数据publicDataSetGetTable(){SqlCommandcmd=newSqlCommand();cmd.CommandText=@"SELECTID,ISBN,NameAS书名,AuthorA