1、概念

    会话管理:管理浏览器和服务器之间会话过程中产生的会话数据。
    Cookie技术:会话数据保存到浏览器客户端。【存 编号/标记(id)】
    Session技术:会话技术会保存到服务器端(内存)。 【存 具体值】

2、Cookie技术(会话数据保存到浏览器客户端)

2.1、Cookie的核心API

1、服务器端创建cookie对象
        Cookie cookie=new Cookie(“name”,”value”);
   2、设置Cookie
        void setPath(java.lang.String uri)  
        void setMaxAge(int expiry)  
        void setValue(java.lang.String newValue)
   3、把cookie发送给浏览器端;
        Response.addCookie(cookie);
   4、 浏览器带着cookie信息访问服务器(通过请求头:)
       Cookie[] cookies=request.getCookies(); //服务器接收cookie数据
 局限:
    1、只能保存字符串数据,不能保存中文
    2、一个cookie不能超过4kb

2.2、Cookie原理

1)服务器创建cookie对象,把会话数据存储到cookie对象中
        New Cookie(“name”,”value”);
   2)服务器发送cookie到浏览器
        Response.addCookie(cookie);
   3)浏览器得到服务器发送的cookie,然后在保存到浏览器端
        Cookie:name=rose(隐藏带着叫cookie名称的请求头)
   4)服务器接收到浏览器带来的cookie信息
        Request.getCookies();

2.3、Cookie的细节

1)SetPath:设置cookie的有效路径。有效路径指保存到哪里,那么浏览器在有效的路径下方访问是就带有cookie信息,否则就不带。
    2)setMaxAge(int time):设置cookie的有效时间。
        正整数:表示cookie]数据保存到浏览器的缓冲目录(硬盘中),数值表示保存的时间。
        负整数:表示cookie保存浏览器的内存中,浏览器关闭cookie就丢失。
               零:表示删除同名的cookie数据
    3)cookie数据类型值能保存非中文的数据类型。可以保存cookie,但是浏览器一般只允许放300个cookie,每个站点最多只能放20个Cookie,每个cookie的大小限制4Kb

2.4、实例

例1

 package com.shore.cookie;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/*
* 第一个cookie的程序
* */
public class CookieDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { /*request.setAttribute("name","hello");
request.getRequestDispatcher("GetData").forward(request, response);*/
//创建Cookie对象
Cookie cookie1=new Cookie("name","rose");
//Cookie cookie2=new Cookie("email","1314@qq.com");
/*
* 1)设置Cookie的有效路径:默认情况下,有效路径在当前的web应用下./MyCookie
* cookie.setPath("/MyCookie")
* */
//cookie1.setPath("/MyCookie2");
//response.addCookie(cookie2);
/*
* 2)设置cookie的有效时间
* 正数:表示cookie保存到浏览器的缓存目录(硬盘中),数值表示保存时间
* 负整数:表示cookie数据保存浏览器的内存中.浏览器关闭cookie就失效!!
* 零:表示删除同名的cookie数据
* */
cookie1.setMaxAge(100);
//cookie2.setMaxAge(30);//5秒 从最后步调用cookie开始计算的
//cookie1.setMaxAge(-1);
response.addCookie(cookie1);
Cookie[] cookies=request.getCookies();
if(cookies!=null){
for (Cookie c : cookies) {
String name=c.getName();
String value=c.getValue();
System.out.println("name="+name+";value="+value);
}
}else{
System.out.println("没有接收到cookie数据");
}
}
}

例2

 package com.shore.cookie;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class GetData extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
/*String name=(String)request.getAttribute("name");
System.out.println(name);*/
Cookie[] cookies=request.getCookies();
/*if(cookies!=null){
for (Cookie c : cookies) {
String name=c.getName();
String value=c.getValue();
System.out.println("name="+name+";value="+value);
}
}else{
System.out.println("没有接收到cookie数据");
}*/
}
}

例3

 package com.shore.cookie;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class DeleteCookie extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { /*
* 需求:删除Cookie
* */
Cookie cookie=new Cookie("name", "xxxx");
cookie.setMaxAge(0);//删除同名cookie
response.addCookie(cookie);
System.out.println("删除成功");
}
}

3、Session技术(会话数据保存到服务器端[内存])

3.1Session的核心API

1、创建和得到Session对象
        HttpSession session=Request.getSession(); //创建或者得到Session对象
        Request.getSession(false); //得到session对象
    2、会话数据保存Session对象中,和得到会话数据
        Session.setAttribute(“name”,Object); //保存数据
        Session.getAttribute(“name”); //得到数据
  注意:
      1、session.setMaxInactiveInterval(时间); //设置session过去时间
      2、session.invalidate(); //手动销毁session对象

3.2、session细节

1、getId():得到session编号
    2、两个getSession方法
        1)getSession()/getSession(true):创建或得到session对象。没有匹配的session编号时,会自动创建新的session对象。
        2)getSession(false):得到session对象。没有匹配的session编号时,返回null。
   3、session对象销毁的时间
       3.1、自动销毁session对象
            1)默认情况下,为30分钟,过时 浏览器会自动回收
            2)修改(设置)session的回收时间。
            3)全局修改

          <!-- 修改session的全局有效时间:分钟 -->
          <session-condig>
                  <session-timeout>时间数字</session-timeout>
          </session-condig>

3.2、手动销毁session对象
           1)直接调用invalidate();方法

3.3、实例

SessionDemo1.java文件

 package com.shore.session;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; /**
* @author DSHORE / 2018-9-9
*
*/
public class SessionDemo1 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //创建session对象
HttpSession session=request.getSession();
//创建cookie对象
Cookie c=new Cookie("JSESSIONID",session.getId());//键值对
session.setMaxInactiveInterval(10); //设置Session的有效时间为10秒
c.setMaxAge(60*60);//3600秒
response.addCookie(c);//把值添加到浏览器的cookie中
session.setAttribute("name","Jack");
System.out.println(session.getId()+"---->SessionDemo1的值");
}
}

SessionDemo2.java文件

 package com.shore.session;

 import java.io.IOException;

 import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; /**
* @author DSHORE / 2018-9-9
*
*/
public class SessionDemo2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //创建session对象
HttpSession session=request.getSession(false);
if(session!=null){
String sessionName=(String)session.getAttribute("name");
System.out.println(sessionName);
System.out.println(session.getId());
}else{
System.out.println("id不对");
}
}
}

结果图

       

实例解析:
1、第一次访问创建的session对象时,给session对象分配一个唯一的id,叫JSESSIONID。
    HttpSession session=request.getSession();
2、把JSESSIONID作为cookie的值发送给浏览器保存。
    Cookie c=new Cookie("JSESSIONID",session.getId());    
    response.addCookie(c);//把值添加到浏览器的cookie中
3、第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器。
4、服务器得到JSESSIONID,并在服务器的内存中搜索是否存在对应编号(id)的session对象。
    if(session!=null){
          String sessionName=(String)session.getAttribute("name");
          System.out.println(sessionName);
          System.out.println(session.getId());
    }else{
      System.out.println("id不对");
    }
5、如果找到对应编号的session对象,则直接返回该对象。
6、如果找不到对应编号的session对象,则创建新的session对象,循环第1到底6步(骤)。

结论:通过cookie(浏览器端的请求头)中的JSESSIONID编号,去服务器中寻找session对象对应的值。

原创作者:DSHORE

作者主页:http://www.cnblogs.com/dshore123/

原文出自:https://www.cnblogs.com/dshore123/p/9613620.html

欢迎转载,转载务必说明出处。(如果本文对您有帮助,可以点击一下右下角的 推荐,或评论,谢谢!

java基础79 会话管理(Cookie技术、Session技术)的更多相关文章

  1. 会话管理---Cookie与Session

    会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 保存会话数据的两种技术:Cookie,Session Cookie是客户端技术, ...

  2. Java Web之会话管理二:Session

    一.Session 在web开发中,服务器可以为每个yoghurt浏览器创建一个会话对象(Session)对象.注意:一个浏览器独占一个Session对象.因此,在需要保存用户数据时,服务器程序可以把 ...

  3. Java中的会话管理——HttpServlet,Cookies,URL Rewriting(译)

    参考谷歌翻译,关键字直接使用英文,原文地址:http://www.journaldev.com/1907/java-session-management-servlet-httpsession-url ...

  4. Java 中的会话管理—— HttpServlet,Cookies,URL Rewriting(转)

    索引 1.什么是 Session? 2.Java 中的会话管理—— Cookie 3.Java Servlet 中的 Session —— HttpSession 理解 JSESSIONID Cook ...

  5. 理解cookie和session技术

    一.HTTP协议的无状态性 WEB应用程序使用的是HTTP协议传输数据的,HTTP协议是一个无状态的协议,这次数据传输完毕,客户端会和服务端断开连接,再次传输数据就需要重新建立新的连接,这也就无法会话 ...

  6. 管理Cookie和Session

    管理Cookie和Session 前言 这几天中,一直再跟漏洞打交道,而在这些漏洞中,出现的最多的就是 Cookie 和 Session 了.这篇文章就简单的介绍一些 Cookie 中最常用的四个属性 ...

  7. JAVA基础之会话技术-Cookie及Session

    至此,学习Servlet三个域对象:ServletContext(web项目).request(一次请求).Session(一个客户端)!均有相同的方法! 从用户开始打开浏览器进行操作,便开始了一次会 ...

  8. Java Web之会话管理一: 使用Cookie进行会话管理

    一.Cookie的概念 Cookie(会话)可以简单的理解为:用户开一个浏览器,点击多个链接,访问服务器多个web资源,然后关闭浏览器,整个过程称为一个会话. 二.会话过程中解决的问题 用户在使用浏览 ...

  9. C#基础知识之理解Cookie和Session机制

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话.常用的会话跟踪技术是Cookie与Session.Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端 ...

随机推荐

  1. Android中EditText显示明文与密码的两种方式

    效果图如下所述: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and ...

  2. 关于表单中Readonly和Disabled

    Readonly和Disabled是用在表单中的两个属性,它们都能够做到使用户不能够更改表单域中的内容.但是它们之间有着微小的差别,总结如下: Readonly只针对input(text / pass ...

  3. EL与OGNL以及值栈的理解

    这里先添加下在项目遇到的问题: 这两天在做论坛项目的时候,犯了一个错误:将数据放入值栈中,结果jsp页面获取不到. 困扰了许久: 总结如下: (1)每个action对应相应页面的值栈中值的获取,在属于 ...

  4. .Net并行编程系列之三:创建带时间限制(Timeout)的异步任务并取得异步任务的结果

    尝试创建基于MVVM三层架构的异步任务: 场景:View层触发ViewModel层的动作请求,ViewModel层异步的从Model层查询数据,当数据返回或者请求超时时正确更新ViewModel层数据 ...

  5. Service Fabric Cluster Manager

    作者:潘罡 (Van Pan)@ Microsoft 我们回到Service Fabric最底层的话题,谈谈Service Fabric是怎么工作的. 首先,我们回到下面的文档,看看Service F ...

  6. 初学SQL语句练习1

    --[1 ]查询出每个月倒数第三天受雇的所有员工SELECT * FROM EMP WHERE HIREDATE=LAST_DAY(HIREDATE)-2; --[2 ]找出早于30 年前受雇的员工S ...

  7. CSS之float样式

    一.简介 Css样式的float浮动属性,用于设置标签对象(如:<div>标签盒子.<span>标签.<a>标签.<em>标签等html标签)的浮动布局 ...

  8. python中的常用模块

    python中常用的模块 time: 1)time.localtime([secs]):将一个时间戳转换为当前时区的struct_time.secs参数未提供,则以当前时间为准. 2)time.gmt ...

  9. 第10章-Vue.js 项目实战

    一.本节内容 掌握项目环境中路由的配置方法 ***** 熟练掌握编写单文件组件的编写 *** 能够使用swiper.js进行轮播图组件的封装 能够使用axios进行数据请求 二.webpack项目的目 ...

  10. CF869 E 二维BIT

    1代表建一个屏障,2代表去掉一个屏障,3询问是否两点相通. 仿造一维询问是否在同一区间的问题扩展到二维,树状数组维护区间标记即可,标记值可以直接2500进制不会爆LL. /** @Date : 201 ...