、会话技术:

  1.会话:一次会话中包含多次请求和相应。

    一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止

  2.功能:在一次会话的范围内的多次请求间,共享数据

  3.方式:

    1.客户端会话技术:Cookie

    2.服务器端会话技术:Session

一、Cookie

  1.概念:客户端会话技术,将数据保存到客户端

  2.快速入门:

    使用步骤:j

      1.创建Cookie对象,绑定数据

        new Cookie(String name,String value)

      2.发送Cookie对象

        response.addCookie(Cookie cookie)

      3.获取Cookie,拿到数据

        Cookie[] resquest

  3.实现原理  

    基于响应头set-cookie和请求头cookie实现

  4.cookie的细节

    1.一次可不可以发送多个cookie?

      可以

      可以创建多个Cookie对象,使用response调用多次addCookie方法发送cookie即可。

    2.cookie在浏览器中保存多长时间?

      1.默认情况下,当浏览器关闭后,Cookie数据被销毁

      2.持久化存储

        setMaxAge(int seconds)

          1.正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到,cookie文件自动失效

          2.负数:默认值

          3.零:删除cookie信息

3. cookie能不能存中文?

 * 在tomcat 8 之前 cookie中不能直接存储中文数据。* 需要将中文数据转码---一般采用URL编码(%E3)

* 在tomcat 8 之后,cookie支持中文数据。特殊字符还是不支持,建议使用URL编码存储,URL解码解析

4. cookie共享问题?

1. 假设在一个tomcat服务器中,部署了多个web项目,那么在这些web项目中cookie能不能共享?

* 默认情况下cookie不能共享

    * setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录

2. 不同的tomcat服务器间cookie共享问题?

  setDomain(String path):如果设置一级域名相同,那么多个服务器之间cookie可以共享

* setDomain(".baidu.com"),那么tieba.baidu.com和news.baidu.com中cookie可以共享

5. Cookie的特点和作用

    1. cookie存储数据在客户端浏览器

    2. 浏览器对于单个cookie 的大小有限制(4kb) 以及 对同一个域名下的总cookie数量也有限制(20个)

    * 作用:

1. cookie一般用于存出少量的不太敏感的数据

2. 在不登录的情况下,完成服务器对客户端的身份识别

6. 案例:记住上一次访问时间

  1. 需求:

    1. 访问一个Servlet,如果是第一次访问,则提示:您好,欢迎您首次访问。    

    2. 如果不是第一次访问,则提示:欢迎回来,您上次访问时间为:显示时间字符串

  2. 分析:  

    1. 可以采用Cookie来完成

    2. 在服务器中的Servlet判断是否有一个名为lastTime的cookie

      1.有:不是第一次访问

        1.响应数据:欢迎回来,您上次访问时间为:2018年6月10日11:50:20

        2.写回Cookie:lastTime=2018年6月10日11:50:01

      2.没有:是第一次访问

        1.响应数据:您好,欢迎您首次访问

        2.写回Cookie:lastTime=2018年6月10日11:50:01

3. 代码实现:

package cn.itcast.cookie;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

import java.net.URLDecoder;

import java.net.URLEncoder;

import java.text.SimpleDateFormat;

import java.util.Date;

@WebServlet("/cookieTest")

public class CookieTest extends HttpServlet {

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

//设置响应的消息体的数据格式以及编码

response.setContentType("text/html;charset=utf-8");

//1.获取所有Cookie

Cookie[] cookies = request.getCookies();

boolean flag = false;//没有cookie为lastTime

//2.遍历cookie数组

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

for (Cookie cookie : cookies) {

//3.获取cookie的名称

String name = cookie.getName();

//4.判断名称是否是:lastTime

if("lastTime".equals(name)){

//有该Cookie,不是第一次访问

flag = true;//有lastTime的cookie

//设置Cookie的value

//获取当前时间的字符串,重新设置Cookie的值,重新发送cookie

Date date  = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

String str_date = sdf.format(date);

System.out.println("编码前:"+str_date);

//URL编码

str_date = URLEncoder.encode(str_date,"utf-8");

System.out.println("编码后:"+str_date);

cookie.setValue(str_date);

//设置cookie的存活时间

cookie.setMaxAge(60 * 60 * 24 * 30);//一个月

response.addCookie(cookie);

//响应数据

//获取Cookie的value,时间

String value = cookie.getValue();

System.out.println("解码前:"+value);

//URL解码:

value = URLDecoder.decode(value,"utf-8");

System.out.println("解码后:"+value);

response.getWriter().write("<h1>欢迎回来,您上次访问时间为:"+value+"</h1>");

break;

}

}

}

if(cookies == null || cookies.length == 0 || flag == false){

//没有,第一次访问

//设置Cookie的value

//获取当前时间的字符串,重新设置Cookie的值,重新发送cookie

Date date  = new Date();

SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

String str_date = sdf.format(date);

System.out.println("编码前:"+str_date);

//URL编码

str_date = URLEncoder.encode(str_date,"utf-8");

System.out.println("编码后:"+str_date);

Cookie cookie = new Cookie("lastTime",str_date);

//设置cookie的存活时间

cookie.setMaxAge(60 * 60 * 24 * 30);//一个月

response.addCookie(cookie);

response.getWriter().write("<h1>您好,欢迎您首次访问</h1>");

}

}

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

this.doPost(request, response);

}

}

二、Session:主菜

  1.概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端对象中。HttpSession

  2.快速入门:

    1.获取HttpSession对象:

      HttpSession session = resquest.getSession();

    2.使用HttpSession对象:

      Object getAttribute(String name)

      void setAttribute(String name,Object value)

      void removeAttribute(String name)

    3.原理

      Session的实现是依赖于Cookie的

    4.细节

      1.当客户端关闭后,服务器不关闭,两次获取session是否为同一个?

        默认情况下不是。

        如果需要相同,则可以创建Cookie,键为jsessionid,设置最大存活时间,让cookie持久化保存。

          Cookie c=new Cookie("JSESSIONID",session.getId());

          c.setMaxAge(60*60);

          response.addCookie(c);

      2.客端不关闭,服务器关闭后,两次获取的session是同一个么?

        不是同一个,但是要确保数据不丢失。tomcat自动完成以下工作

          session的钝化:

            在服务器正常关闭之前,将session对象系列化到硬盘上。

          session的活化:

            在服务器启动后,将session文件转化为内存中的session

      3.session什么时候被销毁?

        1.服务器关闭

        2.session对象调用invalidate()

        3.session默认失效30分钟

          选择性配置

      <session-config><session-timeout>30</session-timeout></session-config>

    5.session的特点

      1.session用于存储一次会话的多次请求的数据,存在服务器端

      2.session可以存储任意类型,任意大小的数据

      -session与Cookie的区别:

        1.session存储数据在服务器端,Cookie在客户端  

        2.session没有数据大小限制,Cookie有

        3. session数据安全,Cookie相对于不安全

案例:验证码

  1.案例需求:

    1.访问带有验证码的登录页面login.jsp

    2.用户输入用户名,密码以及验证码。  

       如果用户名和密码输入有误,跳转登录页面,提示:用户名密码错误

       如果验证码输入有误,跳转登录页面,提示:验证码错误

       如果全部输入正确,则跳转到主页success.jsp,显示:用户名

5.13会话技术Cookie---Session的更多相关文章

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

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

  2. Web核心之会话技术Cookie&Session

    什么是会话技术? http协议是无状态协议.为了满足在多次请求之间数据进行交互,推出了会话技术. 会话概念:一次会话,指的是从客户端和服务器建立起连接开始,到客户端或服务器断开连接为止.中间可能进行多 ...

  3. JavaWeb学习笔记五 会话技术Cookie&Session

    什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话 ...

  4. JavaEE之会话技术Cookie&Session

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

  5. 会话技术Cookie&Session

    1.会话技术概述 从打开浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话.会话技术用于记录本次会话中客户端的状态与数据. 会话技术分为Cookie和Session: Cookie:数据存储 ...

  6. 03012_会话技术Cookie&Session

    1.会话技术简介 (1)存储客户端的技术 网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识 ...

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

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

  8. 会话技术 Cookie+Session

    会话:这种在多次HTTP连接间维护用户与同一用户发出的不同请求之间关联的情况称为维护一个会话(session) 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开: 功能:在一次会话 ...

  9. Servlet 会话技术cookie和session

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

  10. 会话技术cookie与session

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

随机推荐

  1. bootstrapValidator代码中开启验证和判断验证是否通过

    //开启验证 $('#saveadmin_form').data('bootstrapValidator').validate(); //是否通过校验 if(!$('#saveadmin_form') ...

  2. matplotlib命令与格式:标题(title),标注(annotate),文字说明(text)

      1.title设置图像标题 (1)title常用参数 fontsize设置字体大小,默认12,可选参数 ['xx-small', 'x-small', 'small', 'medium', 'la ...

  3. 模板中tempname与class区别

    前言 在分析traits编程之前, 我们需要对模板参数类型tempname和class有一定的了解, 要明白他们在哪些方面不同, 哪些方面相同, 这样才能对体会到traits编程的核心. 如果你已经明 ...

  4. Python MongoDB 教程

    基于菜鸟教程实际操作后总结而来 Python MongoDB MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON). MongoDB 数据库安装与介绍可以 ...

  5. bat 读取当前目录指定文件信息并拼接

    bat 读取指定文件的信息并拼接成指定格式

  6. SIM900A 发送AT+CSTT 总是 返回Error的原因分析

    检查 模块的供电是否正常 本例 修改供电后 联网恢复正常.

  7. ZooKeeper常用命令行工具及使用(转)

    一.服务端 bin目录下常用的脚本解释 zkCleanup:清理Zookeeper历史数据,包括食物日志文件和快照数据文件 zkCli:Zookeeper的一个简易客户端 zkEnv:设置Zookee ...

  8. [转]使用代码去描述WCF配置文件

    转自:使用代码去描述WCF配置文件 在应用程序部署的时候,WCF客户端因为服务器地址的变化,需要修改程序配置文件的地址URL,手动修改很不方便,还会造成错误,所以尽量把描述WCF配置文件的配置使用代码 ...

  9. scp and tar

    scp 命令随记 scp file username@remoteIp:directory 创建tar包 tar zcvf file.tar.gz directory tar zcvf hadoop. ...

  10. linux更改gitlab存储位置

    更改仓库存储位置默认时GitLab的仓库存储位置在“/var/opt/gitlab/git-data/repositories”,在实际生产环境中显然我们不会存储在这个位置,一般都会划分一个独立的分区 ...