⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cookies.txt

📁 描述了cookie的使用技巧,和平常之中在编程方面的基本应用
💻 TXT
📖 第 1 页 / 共 3 页
字号:
     上述处理过程经常会遇到,为方便计下面我们提供一个getCookieValue方法。只要给出Cookie对象数组、Cookie名字和默认值,getCookieValue方法就会返回匹配指定名字的Cookie值,如果找不到指定Cookie,则返回默认值。 
   
     9.3 几个Cookie工具函数 
   
     下面是几个工具函数。这些函数虽然简单,但是,在和Cookie打交道的时候很有用。 
   
     9.3.1 获取指定名字的Cookie值 
   
     该函数是ServletUtilities.java的一部分。getCookieValue通过循环依次访问Cookie对象数组的各个元素,寻找是否有指定名字的Cookie,如找到,则返回该Cookie的值;否则,返回参数中给出的默认值。getCookieValue能够在一定程度上简化Cookie值的提取。 
   public static String getCookieValue(Cookie[] cookies, 
   String cookieName, 
   String defaultValue) { 
   for(int i=0; i<cookies.length; i++) { 
   Cookie cookie = cookies[i]; 
   if (cookieName.equals(cookie.getName())) 
   return(cookie.getValue()); 
   } 
   return(defaultValue); 
   } 
   
   
   
   
     9.3.2自动保存的Cookie 
   
     下面是LongLivedCookie类的代码。如果你希望Cookie能够在浏览器退出的时候自动保存下来,则可以用这个LongLivedCookie类来取代标准的Cookie类。 
  package hall; 
   
  import javax.servlet.http.*; 
   
  public class LongLivedCookie extends Cookie { 
   public static final int SECONDS_PER_YEAR = 60*60*24*365; 
   public LongLivedCookie(String name, String value) { 
   super(name, value); 
   setMaxAge(SECONDS_PER_YEAR); 
   } 
  } 
   
   
   
   
     9.4.实例:定制的搜索引擎界面 
   
     下面也是一个搜索引擎界面的例子,通过修改前面HTTP状态代码的例子得到。在这个Servlet中,用户界面是动态生成而不是由静态HTML文件提供的。Servlet除了负责读取表单数据并把它们发送给搜索引擎之外,还要把包含表单数据的Cookie发送给客户端。以后客户再次访问同一表单时,这些Cookie的值将用来预先填充表单,使表单自动显示最近使用过的数据。 
   
     SearchEnginesFrontEnd.java 
   
     该Servlet构造一个主要由表单构成的用户界面。第一次显示的时候,它和前面用静态HTML页面提供的界面差不多。然而,用户选择的值将被保存到Cookie(本页面将数据发送到CustomizedSearchEngines Servlet,由后者设置Cookie)。用户以后再访问同一页面时,即使浏览器是退出之后再启动,表单中也会自动填好上一次搜索所填写的内容。 
   
     注意该Servlet用到了ServletUtilities.java,其中getCookieValue前面已经介绍过,headWithTitle用于生成HTML页面的一部分。另外,这里也用到了前面已经说明的LongLiveCookie类,我们用它来创建作废期限很长的Cookie。 
  package hall; 
   
  import java.io.*; 
  import javax.servlet.*; 
  import javax.servlet.http.*; 
  import java.net.*; 
   
  public class SearchEnginesFrontEnd extends HttpServlet { 
   public void doGet(HttpServletRequest request, 
   HttpServletResponse response) 
   throws ServletException, IOException { 
   Cookie[] cookies = request.getCookies(); 
   String searchString = 
   ServletUtilities.getCookieValue(cookies, 
   "searchString", 
   "Java Programming"); 
   String numResults = 
   ServletUtilities.getCookieValue(cookies, 
   "numResults", 
   "10"); 
   String searchEngine = 
   ServletUtilities.getCookieValue(cookies, 
   "searchEngine", 
   "google"); 
   response.setContentType("text/html"); 
   PrintWriter out = response.getWriter(); 
   String title = "Searching the Web"; 
   out.println(ServletUtilities.headWithTitle(title) + 
   "<BODY BGCOLOR=\"#FDF5E6\">\n" + 
   "<H1 ALIGN=\"CENTER\">Searching the Web</H1>\n" + 
   "\n" + 
   "<FORM ACTION=\"/servlet/hall.CustomizedSearchEngines\">\n" + 
   "<CENTER>\n" + 
   "Search String:\n" + 
   "<INPUT TYPE=\"TEXT\" NAME=\"searchString\"\n" + 
   " VALUE=\"" + searchString + "\"><BR>\n" + 
   "Results to Show Per Page:\n" + 
   "<INPUT TYPE=\"TEXT\" NAME=\"numResults\"\n" + 
   " VALUE=" + numResults + " SIZE=3><BR>\n" + 
   "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" + 
   " VALUE=\"google\"" + 
   checked("google", searchEngine) + ">\n" + 
   "Google |\n" + 
   "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" + 
   " VALUE=\"infoseek\"" + 
   checked("infoseek", searchEngine) + ">\n" + 
   "Infoseek |\n" + 
   "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" + 
   " VALUE=\"lycos\"" + 
   checked("lycos", searchEngine) + ">\n" + 
   "Lycos |\n" + 
   "<INPUT TYPE=\"RADIO\" NAME=\"searchEngine\"\n" + 
   " VALUE=\"hotbot\"" + 
   checked("hotbot", searchEngine) + ">\n" + 
   "HotBot\n" + 
   "<BR>\n" + 
   "<INPUT TYPE=\"SUBMIT\" VALUE=\"Search\">\n" + 
   "</CENTER>\n" + 
   "</FORM>\n" + 
   "\n" + 
   "</BODY>\n" + 
   "</HTML>\n"); 
   } 
   
   private String checked(String name1, String name2) { 
   if (name1.equals(name2)) 
   return(" CHECKED"); 
   else 
   return(""); 
   } 
  } 
   
   
   
   
     CustomizedSearchEngines.java 
   
     前面的SearchEnginesFrontEnd Servlet把数据发送到CustomizedSearchEngines Servlet。本例在许多方面与前面介绍HTTP状态代码时的例子相似,区别在于,本例除了要构造一个针对搜索引擎的URL并向用户发送一个重定向应答之外,还要发送保存用户数据的Cookies。 
  package hall; 
   
  import java.io.*; 
  import javax.servlet.*; 
  import javax.servlet.http.*; 
  import java.net.*; 
   
  public class CustomizedSearchEngines extends HttpServlet { 
   public void doGet(HttpServletRequest request, 
   HttpServletResponse response) 
   throws ServletException, IOException { 
   
   String searchString = request.getParameter("searchString"); 
   Cookie searchStringCookie = 
   new LongLivedCookie("searchString", searchString); 
   response.addCookie(searchStringCookie); 
   searchString = URLEncoder.encode(searchString); 
   String numResults = request.getParameter("numResults"); 
   Cookie numResultsCookie = 
   new LongLivedCookie("numResults", numResults); 
   response.addCookie(numResultsCookie); 
   String searchEngine = request.getParameter("searchEngine"); 
   Cookie searchEngineCookie = 
   new LongLivedCookie("searchEngine", searchEngine); 
   response.addCookie(searchEngineCookie); 
   SearchSpec[] commonSpecs = SearchSpec.getCommonSpecs(); 
   for(int i=0; i<commonSpecs.length; i++) { 
   SearchSpec searchSpec = commonSpecs[i]; 
   if (searchSpec.getName().equals(searchEngine)) { 
   String url = 
   searchSpec.makeURL(searchString, numResults); 
   response.sendRedirect(url); 
   return; 
   } 
   } 
   response.sendError(response.SC_NOT_FOUND, 
   "No recognized search engine specified."); 
   } 
   
   public void doPost(HttpServletRequest request, 
   HttpServletResponse response) 
   throws ServletException, IOException { 
   doGet(request, response); 
   } 
  } 


JSP中对Cookie的操作: 类型 方法名 方法解释 
String getComment() 返回cookie中注释,如果没有注释的话将返回空值. 
String getDomain() 返回cookie中Cookie适用的域名. 使用getDomain() 方法可以指示浏览器把Cookie返回给同 一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始 
int getMaxAge() 返回Cookie过期之前的最大时间,以秒计算。 
String getName() 返回Cookie的名字 
String getPath() 返回Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的所有页面。 
boolean getSecure() 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。 
String getValue() 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。 
int getVersion() 返回Cookie所遵从的协议版本。 
void setComment(String purpose) 设置cookie中注释 
void setDomain(String pattern) 设置cookie中Cookie适用的域名  
void setMaxAge(int expiry) 以秒计算,设置Cookie过期时间。 
void setPath(String uri) 指定Cookie适用的路径。 
void setSecure(boolean flag) 指出浏览器使用的安全协议,例如HTTPS或SSL。 
void setValue(String newValue) cookie创建后设置一个新的值。 
void setVersion(int v) 设置Cookie所遵从的协议版本 
//////////////////
Cookie的问题:

首先看一下我的Cookie存取代码 (这个Cookie操作支持二级域名访问)
#region 存取Cookie
    /// <summary>
    /// 存Cookie
    /// Json Lee 2007-09-24
    /// </summary>
    /// <param name="strName">名称</param>
    /// <param name="strValue">值</param>
    /// <param name="expDate">到期时间</param>
    /// <returns></returns>        
    public void SetCookie(string cookieName, string cookieValue, int cookieExpiryMinute)
    {
        cookieName = cookieName.ToLower();
        HttpCookie cookie = new HttpCookie(cookieName,cookieValue);
        cookie.Expires = DateTime.Now.AddMinutes(cookieExpiryMinute);  //设置Cookie过期时间
        cookie.Path = "/";      
        //设置可访问Cookie的路径 为项目下的cookie文件夹及其子文件夹下所有页面
        //如果需要整个应用程序可访问 则设置为cookie.Path = "/";即可  
        cookie.Domain = ".163.com";       
        //以www.163.com为例,若要在 news.163.com等不同主机访问可以如上设置         

        //删除旧的同名Cookie
        HttpContext.Current.Response.Cookies.Remove(cookieName);

        HttpContext.Current.Response.Cookies.Add(cookie);
    }

    /// <summary>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -