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. Java考试题之七

    QUESTION 150 Click the Exhibit button. Given: ClassA a = new ClassA(); a.methodA(); What is the resu ...

  2. Linux服务器修改文件句柄数和用户最大进程数限制

    1.临时修改的方法:ulimit -HSn 102400此方法当前会话有效 2.永久修改方法(修改单个进程打开的最大句柄数)修改vi /etc/security/limits.conf,在后面添加一下 ...

  3. windows下64位python的安装及机器学习相关包的安装(实用)

    开通博客已久,想了好久决定写个基础的安装教程,望后人少走弯路,也借此希望跟大家多多交流.文中给出的链接默认是基于对python2.7的前提下的包. 1.首先下载64位Python包,进行安装(默认py ...

  4. gulp+webpack配置

    转自:https://www.jianshu.com/p/2549c793bb27 gulp gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开 ...

  5. bzoj千题计划141:bzoj3532: [Sdoi2014]Lis

    http://www.lydsy.com/JudgeOnline/problem.php?id=3532 如果没有字典序的限制,那么DP拆点最小割即可 加上字典序的限制: 按c从小到大枚举最小割边集中 ...

  6. [SDOI2016 Round1] 数字配对

    COGS 2221. [SDOI2016 Round1] 数字配对 http://www.cogs.pro/cogs/problem/problem.php?pid=2221 ★★★   输入文件:m ...

  7. codevs 1540 1540 银河英雄传说

    1540 银河英雄传说 题目描述 Description 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银 ...

  8. nginx.conf 基础配置

    ### 全局块开始### #配置允许运行nginx服务器的用户和用户组 user nobody; #配置允许nginx进程生成的worker process 数 worker_processes 1; ...

  9. 【Linux 命令】iftop安装与简单使用

    iftop是linux下的一个流量监控工具,用于查看实时网络流量,反向解析IP,显示端口信息官网:http://www.ex-parrot.com/~pdw/iftop/ 1.安装必须软件包 yum ...

  10. BOOST 之filesystem, path

    目录[-] 使用 boost::filesystem 的第一个程序 清单 1. 用于确定某个文件的类型是否为 Directory 的代码 了解 Boost path 对象 清单 2. 创建 Boost ...