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. UVA.10791 Minimum Sum LCM (唯一分解定理)

    UVA.10791 Minimum Sum LCM (唯一分解定理) 题意分析 也是利用唯一分解定理,但是要注意,分解的时候要循环(sqrt(num+1))次,并要对最后的num结果进行判断. 代码总 ...

  2. rsync命令比对文件及增量同步

    A fast,versatile,remote (and local) file-copying tool. rsync基于ssh协议实现高效率远程或本地文件复制,传输速度比scp快.复制文件时会比对 ...

  3. apache.commons.io.FileUtils的常用操作

    至于相关jar包可以到官网获取 http://commons.apache.org/downloads/index.html package com.wz.apache.fileUtils; impo ...

  4. 利用Azure Media Services Explorer发布VOD视频

    1.连接Media Services账号, 填入Media Services的账号以及Account Key 如果使用中国的Azure的话,需要在Endpoint节上更改一下,因为国内的Azure的接 ...

  5. Linux Wget 命令实例讲解

    Linux wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,尤其对于网络管理员,经常要下载一些软件或从远程服务器恢复备份到本地服务器.如果我们使用虚拟主机,处理这样的 ...

  6. (转) linux下vim和bash配置文件

    1.注释版  ~/.vimrc "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限 set nocompatible set autoread " 文件修改之后自动载入 ...

  7. Machine Learning Trick of the Day (2): Gaussian Integral Trick

    Machine Learning Trick of the Day (2): Gaussian Integral Trick Today's trick, the Gaussian integral ...

  8. 动态引用外部的Javascript脚本文件[转]

    你可以参考下面方法,进行动态为网页引用外部的Javascript脚本文件.代码写在Page_Init方法内. VB.NET: 下图是运行时,查看HTML的源代码: C#:

  9. R6—单变量正态性检验

    方法不唯一 单变量正态检验主要的话包括以下这些 shapiro.test();#Shapiro-Wilk检验 library("nortest"); lillie.test() # ...

  10. Tju_Oj_2790Fireworks Show

    这个题主要在于时间复杂度的计算,N是10的6次方,C是10的2次方,OJ系统可接受的时间是10的7次方(室友说是无数先人测出来了┭┮﹏┭┮),所以如果普通遍历的话肯定会超时.而代码中是跳着走了,相当于 ...