至此,学习Servlet三个域对象:ServletContext(web项目)、request(一次请求)、Session(一个客户端)!均有相同的方法!

  从用户开始打开浏览器进行操作,便开始了一次会话,直至关闭浏览器为止结束。在此过程中,每次产生请求时均会产生一次cookie,同时会产生一个JESSIONID进入到客户端进行创建内存空间,下次调用直接寻找此唯一的ID值。数据存储在两个地方均有利弊!需要注意的是,浏览器关闭,session并没有销毁!

一、会话技术简介:

1、存储客户端的状态:

  因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态。

会话技术是帮助服务器记住客户端状态(区分客户端)

2、会话技术:

①、从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话。会话技术就是记录这次会话中客户端的状态与数据的。

②、会话技术分为Cookie 和Session:

Cookie:数据存储在客户端本地,减少服务器端的存储的压力,安全性不好,客户端可以清楚cookie.

Session:将数据存储到服务器端,安全性相对好,增加服务器的压力。

二、Cookie技术:

1、服务器向客户端发送一个Cookie(不能存中文)

Cookie cookie=new Cookie(String name,String value)

2、设置cookie在客户端的持久化时间:

cookie.setMaxAge(int seconds)

如果不设置持久化时间,cookie会存储到浏览器的内存中,浏览器关闭时cookie信息销毁。设置了的话,会在规定的时间内存在。

3、设置cookie的携带路径:

cookie.setPath(String path)

如果不设置携带路径,cookie信息在访问 产生 该cookie的web资源所在的路径 都携带cookie信息。

4、向客户端发送cookie

response.addCookie(Cookie cookie)

5、删除客户端的cookie

使用同名同路径的持久化时间为0的cookie进行覆盖

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//创建Cookie对象
Cookie cookie= new Cookie("godds","naiping");
//设置持久化时间(从请求Servlet开始)
cookie.setMaxAge(60*2);
//设置cookie携带路径(只有访问此路径才携带)
//cookie.setPath("/WEB07/SendCookieServlet");
/*cookie.setPath("/WEB07");
cookie.setPath("/");*/
//发送
response.addCookie(cookie);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//删除Cookie
Cookie cookie = new Cookie("goods","naiping");
cookie.setMaxAge(0);
response.addCookie(cookie);
}

6、服务器接收客户端携带cookie的方式:

以请求头的方式发送到服务器端的

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取cookie数组
Cookie[] cookies = request.getCookies();
//遍历cookie数组通过cookie名获取cookie值
for(Cookie c:cookies){
if(c.getName().equals("goods")){
System.out.println(c.getValue());
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取当前的时间对象
Date date = new Date();
//创建日期转换类对象
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
//将日期对象转为字符串
String time = sdf.format(date);
//创建cookie对象,记录当前访问时间
Cookie cookie = new Cookie("lastTime",time);
cookie.setMaxAge(60*10);
//发送cookie
response.addCookie(cookie);
//接收cookie
Cookie[] cookies = request.getCookies();
//定义变量存储上次访问时间
String lastTime = null;
//遍历
for(Cookie c:cookies){
if(c.getName().equals("lastTime")){
lastTime=c.getValue();
}
}
//解决响应乱码
response.setContentType("text/html;charset=utf-8");
if(lastTime==null){
//第一次访问
response.getWriter().write("您是第一次访问");
}else{
response.getWriter().write("您上次访问时间为"+lastTime);
}
}

三、Session技术:(一个域对象)

1、简介:

  Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID去服务器中寻找属于自己的内存空间。所以说Session的实现是基于Cookie,Session需要借助于Cookie存储客户的唯一性标识JSESSIONID。

2、获得Session对象:

HttpSession session = request.getSession()

  此方法会获得专属于当前会话(当前客户端)的Session对象,如果服务器端没有该会话的Session对象会创建一个新的Session返回,如果已经有了属于该会话的Session直接将已有 的Session返回(实质就是根据JSESSIONID判断该客户端是否在服务器上已经存在session了)

3、域对象的存取数据;

4、生命周期:

①、创建:

    第一次执行 request.getSession() 时创建

②、销毁:

    服务器非正常关闭时;

    Session 过期、失效(默认30分钟)

    手动销毁Session

③、作用范围:

  默认在一次会话中,也就是说,在一次会话中任何资源公用一个session对象。

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取Session域中的内容
HttpSession session = request.getSession();
//获取Session中的内容
String goods = (String)session.getAttribute("goods");
//解决乱码
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(goods);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取Session对象
HttpSession session = request.getSession();
//向Session域中存储数据(cookie不能存汉字)
session.setAttribute("goods", "奶瓶");
//获取JESSIONID
String id = session.getId();
//设置持久化时间---创建一个新的cookie设置其时间并覆盖原来的
//创建Cookie
Cookie cookie = new Cookie("JSESSIONID",id);
cookie.setPath("/WEB08");
cookie.setMaxAge(60*3);
//发送cookie
response.addCookie(cookie);
response.getWriter().write("JSESSIONID:"+id);
//结果 JSESSIONID:0CDD85B8A6E216CA5BDA8E9729D5F230 }

JAVA基础之会话技术-Cookie及Session的更多相关文章

  1. Java EE会话技术Cookie和Session

    会话技术 一.定义 会话技术是帮助服务器记住客户端状态的(区分客户端的).将客户访问的信息存在本地的叫Cookie技术,存在服务器上的叫Session技术. 注意: 一次会话何时开始?从打开一个浏览器 ...

  2. Servlet 会话技术cookie和session

    会话技术 Cookie技术:会话数据保存在浏览器客户端. Session技术:会话数据保存在服务器端. 一.Cooke技术 1. 特点 Cookie技术:会话数据保存在浏览器客户端. 2 .Cooki ...

  3. 会话技术: Cookie 和 Session

    会话技术 会话技术:从浏览器开始访问服务器,到关闭浏览器,这期间发生了许多次请求和响应,这个过程就叫做一次会话. Cookie 和 Session 都是处理会话技术的两种具体实现,Cookie将数据保 ...

  4. 会话技术cookie与session

    目录 会话技术cookie 会话技术 cookie 服务器怎样把Cookie写 给客户端 服务器如何获取客户端携带的cookie session session简介 Session如何办到在一个ser ...

  5. Java web 会话技术 cookie与session

    一.会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话过程中要解决的一些问题 每个用户在使用浏览器与服务器进行会话的过程 ...

  6. 会话技术cookie和session详解

    什么是会话 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 会话技术解决了什么问题 每个用户与服务器进行交互的过程中,各自会有一 ...

  7. java ->会话技术Cookie&Session

    会话技术Cookie&Session 会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户 ...

  8. 简述会话跟踪技术——Cookie和Session

    简述会话跟踪技术--Cookie和Session 本篇文章将会简单介绍Cookie和Session的概念和用法 会话跟踪技术 首先我们需要搞清楚会话和会话跟踪的概念: 会话:用户打开浏览器,访问Web ...

  9. Django2.2 会话技术cookie session token的区别以及实例介绍

    一.区别: 本人见解:使用自定义数据项进行加密,作为唯一身份识别,登陆时写入cookie(session基于这个).在显示相关数据 1.cookie 属于客户端会话技术(数据存储在客户端) 默认的Co ...

随机推荐

  1. sumdoc t3 final dir.txt

    C:\Users\zhoufeiyue\Documents\sumdoc t3 final\sumdoc t3 final dir.txtC:\Users\zhoufeiyue\Documents\s ...

  2. android7/8新特性 画中画、shortcut和分屏模式

    多窗口 在android7.0中原生提供了多窗口模式和画中画模式,多窗口模式将屏幕分为上下或左右两块区域分别显示两个应用,画中画模式主要应用在android TV中,类似于windows中的多窗口. ...

  3. Python3基础 None 使用is来判断

             Python : 3.7.3          OS : Ubuntu 18.04.2 LTS         IDE : pycharm-community-2019.1.3    ...

  4. some try on func swap about & and *

    import "fmt" func swap(x,y *int ) { //x ,y = y,x //fault /* t := *x *x = *y *y = t */ //tr ...

  5. java中静态方法中为什么不能使用this、super和直接调用非静态方法

    这个要从java的内存机制去分析,首先当你New 一个对象的时候,并不是先在堆中为对象开辟内存空间,而是先将类中的静态方法(带有static修饰的静态函数)的代码加载到一个叫做方法区的地方,然后再在堆 ...

  6. elementUI vue this.$confirm 和el-dialog 弹出框 移动

    调试了好久, 还能凑合用, 请直接看DOME 示例,复制就能用: <!DOCTYPE html> <html lang="zh"> <head> ...

  7. 路径规划: PRM 路径规划算法 (Probabilistic Roadmaps 随机路标图)

    随机路标图-Probabilistic Roadmaps (路径规划算法) 路径规划作为机器人完成各种任务的基础,一直是研究的热点.研究人员提出了许多规划方法如: 1. A* 2. Djstar 3. ...

  8. EasyDSS高性能RTMP、HLS(m3u8)、HTTP-FLV、RTSP流媒体服务器功能简介---视频直播、直播鉴权(如何完美将EasyDSS过渡到新版)

    作为RTMP流媒体服务器,接受RTMP推流.进行实时的直播流分发是EasyDSS流媒体服务自身一大核心功能.写本篇博文的一个目的是向大家介绍EasyDSS新版的直播间.匿名直播.和虚拟直播的功能, 另 ...

  9. 使用抓包工具将抓到的接口存放Jmeter中

    1. jmeter工作台新增 HTTP代理服务器.端口设置为:8888 2. 抓包工具上面设置代理服务器地址 3.代理服务器未启动时,抓包工具界面显示无法联网. 4.在Jmeter中点击[启动]HTT ...

  10. 搭建mqtt服务器apollo

    使用的apollo,官网太慢,附上百度云下载地址: 链接:https://pan.baidu.com/s/1NIq6R71hlyPuaUBwPoMPNg 提取码:36vw 原文链接:https://b ...