zoukankan      html  css  js  c++  java
  • java之Cookie具体解释

    Cookie是由server端生成。发送给User-Agent(通常是浏览器)。浏览器会将Cookie的key/value保存到某个文件夹下的文本文件内。下次请求同一站点时就发送该Cookie给server(前提是浏览器设置为启用cookie)。

    Cookie名称和值能够由server端开发自定义。对于JSP而言也能够直接写入JSESSIONID用于标记一个会话(session),这样server能够知道该用户是否合法用户以及是否须要又一次登录等,server能够设置或读取Cookies中包括信息。借此维护用户跟server会话中的状态。

     

    Cookie是client技术。而HttpSession是server端技术。

     

    java中Cookie具体介绍:

     

    1、Cookie是什么?

      一个小信息。由server写给浏览器的。由浏览器来保存。

      client保存的Cookie信息,能够再次带给server。

      Cookie类:javax.servlet.http.Cookie

     

    2、Cookie的属性:

      name必须的

      value必须的

      comment:可选的。凝视

      path: 可选的,假设不设置路径,那么仅仅有设置该cookie的URI及其子路径能够訪问

          写Cookie的程序的訪问路径是:http://localhost:8080/JavaWeb/servlet/CookieDemo

          当中:localhost就是域名。/JavaWeb/servlet就是当前Cookie的path

          若訪问的地址的URI包括着cookie的路径,即URI.startWith(cookie的路径),为true。则client将该cookie带给server。

          比方浏览器存的cookie的路径是/JavaWeb
          如今訪问的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo  则带该cookie
          如今訪问的地址是:http://localhost:8080/JavaWeb/CookieDemo  则带该cookie

          若浏览器存的cookie的路径是/JavaWeb/servlet/
          訪问的地址是:http://localhost:8080/JavaWeb/servlet/CookieDemo   则带该cookie
          訪问的地址是:http://localhost:8080/JavaWeb/CookieDemo   则不带该cookie

          假设一个cookie的路径设置成了/JavaWeb,意味着浏览器訪问当前应用下的全部资源时都会带着该cookie给server。


      domain:可选的。该Cookie所属的站点域名。

    (apache.org)默认值。

      maximum age:可选的。不设置就是会话过程(存在浏览器的内存中)。

    单位是秒
              假设是0。说明要删除。

      version:可选的。

     

    3、怎样向client写Cookie:

     

    HttpServletResponse对象.addCookie(javax.servlet.http.Cookie对象)(就是写了一个响应消息头:Set-Cookie:cookie的信息)

    Servlet规范中的Cookie API 提供了setMaxAge  setPath setDomain等方法,能够对Cookie状态进行控制

     

    特点:一个浏览器针对一个站点最多存20个Cookie;最多存300个Cookie,每一个Cookie的长度不能超过4KB(稀缺)。仅仅是规定。但不同的浏览器实现的不同。

    public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            Cookie cookie=new Cookie("name","Tom");
            //设置Maximum Age
            cookie.setMaxAge(1000);
            //设置cookie路径为当前项目路径
            cookie.setPath(request.getContextPath());
            //加入cookie
            response.addCookie(cookie);
        }



    4、server怎样得到client传来的Cookie:

     

    在Java中利用Serlvet或者JSP scriptlet能够向浏览器端写入Cookie,相同,利用Servet或者JSP scriptlet 也能够读取到 Cookie信息

    Servlet规范中的Cookie API 相同存在getMaxAge  getPath  getDomain等方法,能够获得对应的状态。

     

    只是此处存在一个问题:

    读取Cookie时。发现除了Cookie的key和value外。其它值获取都为null。

    原因非常easy:Cookie从server端发送到client时。信息是完整的,Cookie从客户器端发送到服务端时,信息仅仅剩下key、value了。

    (由于Domain不正确的Cookie、Path不正确的Cookie、过期的Cookie,client是不会发送过来的)

    那为什么Java中提供了对应的get方法呢? 那个方法事实上是在生成Cookie后,尚未发送到client时使用的

     

    server端通过HttpServletRequest对象.getCookies()可获取cookies数组。

    public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            PrintWriter out=response.getWriter();
            Cookie[] cookies=request.getCookies();
            if(cookies!=null){
                for(Cookie cookie:cookies){
                    String name=cookie.getName();
                    String value=cookie.getValue();
                    out.write(name+"="+value);
                }
            }
        }


    5、怎样区分Cookie:

    通过名称不行,应通过domain+path+name来区分的。


    博客园博客:欠扁的小篮子

  • 相关阅读:
    02/Oct/2019:11:55:28 类型的时间转换为
    Flume 实时获取日志内容插入MySQL
    MySQL UTC时间转北京时间 | convert_tz()函数
    使用kettle实现循环
    python 获取系统环境变量 os.environ and os.putenv
    Python
    linux如何判断上一条命令执行是否正确
    局域网两台主机通过网络共享文件
    Kettle(Pentaho)实现web方式远程执行job或transformation
    kettle发送邮件 运行日志
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7243006.html
Copyright © 2011-2022 走看看