课程咨询 :186 8716 1620      qq:2066486918

昆明Java培训 > 达内新闻 > cookie-session理解
  • cookie-session理解

    发布:昆明Java培训      来源:达内新闻      时间:2016-10-21

  • 昆明达内Java培训的老师今天给大家讲cookie-session理解。

    一、会话管理概述

    1、什么是会话?

    好比一次通话。打开浏览器,点击多次链接(发出多次请求和收到多次的响应),关闭浏览器,这个过程就是一次会话。

    2、解决的问题是什么?

    共享多次请求中产生的数据。比如购物车设计等

    二、客户端技术:Cookie

    0、Http协议的消息头

    请求消息头:Cookie客户端向服务器端传递信息

    响应消息头:Set-Cookie服务器端向客户端传递信息

    1、cookie详解

    属性:

    name:Cookie的名称,必要的属性

    value:Cookie的取值(不能为中文),必要的属性

    -------------------以下为可选属性

    path:Cookie的路径

    默认值就是写cookie的那个资源的访问路径

    比如:http://localhost:8080/CookieSession/servlet/CookieDemo1

    path就是/CookieSession/servlet/

    昆明达内Java培训的老师提醒注意:

    如果一个存在浏览器缓存中的cookie的路径是/CookieSession/servlet/

    当访问http://localhost:8080/CookieSession/CookieDemo1时,浏览器根本不带Cookie给服务器。浏览器比对的是cookie的路径和当前访问的资源的路径。

    浏览器满足一下条件就会带cookie给服务器:

    当前访问的地址的路径.startWith(已存cookie的路径)。

    举例理解Cookie的path

    public class CookieDemo1 extends HttpServlet { //CookieDemo1的映射路径为/servlet/CookieDemo1

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    Cookie cookie = new Cookie("lyh","liyanhai");

    //将此cookie的路径设置为当前应用 则访问该应用的任何资源时都会带着

    //cookie.setPath(request.getContextPath());

    //       System.out.println(cookie.getPath());

    response.addCookie(cookie);

    }

    /**

    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

    */

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // TODO Auto-generated method stub

    doGet(request, response);

    }

    }

    public class CookieDemo2 extends HttpServlet { //CookieDemo2的映射路径为/servlet/CookieDemo2

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    Cookie [] cookies = request.getCookies();

    if(cookies != null && cookies.length >0){

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

    if(cookies[i].getName().equals("lyh")){

    System.out.println("cookiePath:" + cookies[i].getPath() + "--------cookieValue:" + cookies[i].getValue());

    break;

    }

    }

    }

    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // TODO Auto-generated method stub

    doGet(request, response);

    }

    }

    public class CookieDemo3 extends HttpServlet {    //CookieDemo3的映射路径为/CookieDemo3

    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    System.out.println("URL:" + request.getRequestURL());

    System.out.println("URI:" + request.getRequestURI());

    Cookie []cookies = request.getCookies();

    if(cookies == null){

    response.getWriter().write("no cookie");

    }

    }

    /**

    * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

    */

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    // TODO Auto-generated method stub

    doGet(request, response);

    }

    }

    当我们访问最开始访问http://localhost:8080/CookieSession/servlet/CookieDemo1时,客户端浏览器是不带任何cookie的,

    而此时的CookieDemo1服务端向客户端浏览器写了一个cookie,

    ,此时由于我们没有给该cookie指定任何的path,所以它默认的path就是/SessionCookie/servlet,

    而在我们访问 http://localhost:8080/CookieSession/servlet/CookieDemo2时,由于浏览器客户端的内存中有了一个cookie:name=lyh,value=liyanhai

    的cookie,所以此时当访问资源的时候会将这个cookie带过去。

    即:如果一个Cookie的路径设置为了当前应用,说明访问该网站的任何资源时浏览器都带该cookie给服务器。(开发中经常做的)

    maxAge:Cookie的最大生存时间。默认是在浏览器的内存中。

    domain:Cookie的域名(网站)。默认就是写cookie的那个资源所属的网站。

    http://localhost:8080/CookieSession/servlet/CookieDemo1域名就是localhost

    version:版本号

    comment:注释

    把Cookie写给客户端:

    HttpServletResponse.addCookie(Cookie c):实际上就是向客户端发送了一个响应消息头。

    注意:客户端只能保存一个网站最多20个Cookie数据,总共最多300个。每个Cookie的大小不能超过4kb。

    服务器端获取客户端带来的Cookie:

    Cookie [] HttpServletRequest.getCookies();

    注意:domain+path+name唯一确定一个Cookie。

    三、服务端技术:Session

    1、主要方法以及实现原理

    void setAttribute(String name,Object value);

    Object getAttribute(String name);

    void removeAttribute(String name);

    String getId()

    HttpSession request.getSession();

    HttpSession request.getSession(boolean b):

    b如果为true,和getSession()完全一样的

    b为false,服务器只是查找,找不到不会创建新的,返回null。

    HttpSession.invalidate();使HttpSession对象立即失效。

    2、session的主要使用场景

    a、使用Session完成简单的购物功能

    b、完成用户的登录

    c、防止表单的重复提交

    了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

    推荐文章

上一篇:Java培训:服务器部署多个tomcat经验

下一篇:Java培训:sso demo取消https

最新开班日期  |  更多

Java--零基础全日制班

Java--零基础全日制班

开班日期:11/30

Java--零基础业余班

Java--零基础业余班

开班日期:11/30

Java--周末提升班

Java--周末提升班

开班日期:11/30

Java--零基础周末班

Java--零基础周末班

开班日期:11/30

  • 网址:http://km .java.tedu.cn      地址:昆明市官渡区春城路62号证券大厦附楼6楼
  • 课程培训电话:186 8716 1620      qq:2066486918    全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56