会话技术

会话:一次会话中包含多次请求和响应
一次会话:浏览器第一次给服务器资源发送请求会话建立,直到有一方断开会话结束

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

方式:
1.客户端会话技术Cookie
2.服务器端会话技术Session

Cookie

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

使用步骤:
1.创建Cookie对象,绑定数据
new Cookie(String name ,String value)
2.发送Cookie对象
response.addCookie(Cookie cookie)
3.获取Cookie,接收数据
Cookie[] request.getCookies()

原理
服务器第一次创建cookie并发送给浏览器是通过set-Cookie响应头将数据发送给浏览器并保存,服务器从浏览器获取Cookie是通过将请求头Cookie发给服务器。

细节
1.一次可以发送多个cookie,使用response调用多次addCookie方法即可
2.Cookie的保存时间
1.默认情况下当浏览器关闭后,Cookie被销毁
2.持久化存储:setMaxAge(int seconds)
参数的取值:

  1. 整数:代表将Cookie数据写到硬盘的文件中持久化存储,参数代表Cookie的存储时间,到时间后会自动删除Cookie
  2. 负数:代表默认值,即关闭浏览器Cookie被销毁
  3. 零:代表删除Cookie消息

3.在tomcat8版本之前Cookie不能直接存储中文数据(解决:将中文数据转码,一般采用URL编码),但是在tomcat8版本之后Cookie可以直接存储中文数据,一些特殊字符还是不支持
建议:使用URL编码存储Cookie,使用URL解码解析Cookie
使用URLEncoder.encode(String value,String charset)编码
使用URLDecoder.decode(String value,String charset)解码

4.Cookie共享问题

  1. 在一个tomcat下部署了多个web项目默认情况下Cookie不能共享
  2. setPath(String path):设置Cookie的获取范围,默认情况下设置当前项目的虚拟目录
  3. 若设置cookie.setPath("/")(斜杠代表当前项目的根路径),则服务器中的多个web项目可以共享Cookie
  4. 不同tomcat服务器间cookie共享
    若设置cookie.setdomain(“一级域名”),则一级域名相同的多个服务器可以共享Cookie
    例:teiba,baidu.com和news.baidu.com若设置cookie.setdomain(".baidu.com")则可以共享Cookie,一级域名:".baidu.com",二级域名:"teiba"和”news“

特点
1.cookie存储数据在客户端浏览器
2.浏览器对于单个cookie的大小有限制(4kb),以及对同一个域名下的cookie数量有限制(20)
作用
1.cookie一般用于存储少量不太敏感的数据
2.在不登陆的情况下完成服务器对客户端的身份识别

案例
需求:
1.访问一个servlet,如果是第一次访问则提示:您好,欢迎您首次访问
2.如果不是第一次访问,则提示:欢迎回来,您上次的访问时间为:显示时间字符串
分析:
1.采用Cookie来完成
2.在服务器中的Servlet判断是否有一个名为lastTime的cookie
1.有,不是第一次访问

  1. 响应数据:欢迎回来,您上次的访问时间为:显示时间字符串
  2. 写回当前时间给cookie

2.没有,第一次访问

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

  2. 写回当前时间给cookie
    例:

     package com.fengqi.web.instance;
    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;/*** @Author: NieFengQi* @Date: 2019/8/1 19:58* @Decription:*/
    @WebServlet("/cookieTest")
    public class CookieTest extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置响应数据字符集response.setContentType("text/html;charset=utf-8");//没有cookie为lastTimeboolean flag = false;//获取cookieCookie[] cookies = request.getCookies();if (cookies != null && cookies.length != 0){//遍历cookiefor (Cookie cookie : cookies) {//若存在lastTime的cookieif ("lastTime".equals(cookie.getName())){flag = true;//存在lastTime则标记为true//响应数据到页面String value = cookie.getValue();value = URLDecoder.decode(value,"utf-8");response.getWriter().write("<h1>欢迎回来,您上次的访问时间为:"+value+"</h1>");//获取当前时间,并设置本地格式Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");String str_date = sdf.format(date);//使用URL编码str_datestr_date = URLEncoder.encode(str_date, "utf-8");//将编码后的时间字符串写回cookiecookie.setValue(str_date);//设置cookie存活时间,并响应回去cookie.setMaxAge(60 * 60 * 24 * 30);response.addCookie(cookie);//跳出循环break;}}}if (cookies == null || cookies.length == 0 || flag == false){//获取当前时间,并设置本地格式Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd天 HH:mm:ss");String str_date = sdf.format(date);//使用URL编码str_datestr_date = URLEncoder.encode(str_date, "utf-8");//创建名为lastTime的CookieCookie 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);}}
    

JSP入门

jsp:java server page java服务器端页面
一个特殊的页面,其中既可以定义java代码,也可以直接定义html标签
用于简化书写

原理:JSP本质就是一个Servlet

jsp的脚本:定义java代码的方式
1.<% java代码 %>:定义的java代码在service方法中,service方法中可以定义什么该脚本就可以定义什么
2.<%! java代码 %>:定义的java代码在jsp转换后的java类的成员位置,可以定义成员变量和成员方法以及代码块(使用较少)
3.<%= java代码 %>:这个脚本相当于输出语句,会将java代码输出到页面,输出语句可以定义什么,该脚本就可以定义什么

jsp的内置对象:在jsp页面不需要获取和创建就可以直接使用的对象
jsp一共有九个内置对象:request、response、out(字符输出流对象)等
out:out.writer类似于response.getWriter(),两者区别:在tomcat响应数据到页面之前,会先找response的缓冲区,再找out的缓冲区;因此response.getWriter()输出的数据永远在out.writer之前

Session

服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象(HttpSession)中

HttpSession对象的常用方法:

Object  getAttribute(String name)
void  setAttributte(String name,Object value)
void  removeAttribute(String name)

原理
session是依赖于cookie的,当一次获取session时响应头中会包含一个set-cookie,set-cookie中包含了一个JSESSIONID的键值对,它可以确保session的唯一性,当第二次获取session时请求头cookie中也包含了JSESSIONID的键值对

细节
1.当客户端关闭后服务器不关闭,两次获取的session默认情况下不是同一个,因为客户端关闭后一次会话已经结束;如果需要相同则可以创建Cookie,键设置为JSESSIONID,值设置为session.getId(),并设置Cookie的存活时间,这样在Cookie的存活时间内,可以让两次获取为同一个sesson
2.客户端不关闭服务器关闭后,两次获取的session默认情况下不是同一个,因为服务器关闭后一次会话已经结束
服务器关闭后为确保数据不会丢失:
session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上
session的活化:在服务器启动后,将session文件转化为内存中的session对象
tomcat会自动完成session的钝化(session对象的序列化)和session的活化(session对象的反序列化),并将session文件存在work目录下,这样就可以确保数据不会丢失;而idea编辑器关闭服务器后也会创建session文件存在work目录下,但是重新启动后会把work目录删除并创建新的work目录,这样session中数据就丢失了
3.销毁session的方式

  1. 服务器关闭
  2. 调用invalidate()方法
  3. session的默认失效时间为30分钟(可以在tomcat的web.xml文件中配置session-config设置session的默认失效时间,tomcat的web.xml文件为所有项目的父文件,或者在当前项目的web.xml中配置)

特点
1.用于存储一次会话多次请求间的数据,存在服务器端
2.session可以存储任意类型任意大小的数据

session与cookie的区别
1.session存储数据在服务器端,cookie存储数据在客户端
2.session没有数据类型,数据大小的限制,而cookie有
3.session数据安全,而cookie相对于不安全

验证码案例
需求:
1.访问带有验证码的登录页面login.jsp
2.用户输入用户名、密码及验证码
如果用户名和密码输入有误,则跳转到登陆页面,提示:用户名或密码错误
如果验证码输入有误,则跳转到登陆页面,提示:验证码错误
如果全部输入正确,则跳转到主页success.jsp,显示用户名,欢迎您

学习笔记-会话技术CookieSession相关推荐

  1. 个人学习笔记 ——【技术美术百人计划】图形 2.1 色彩空间介绍

    个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 一.色彩发送 ...

  2. Electron学习笔记(技术胖)

    Electron学习笔记(技术胖) 标签(空格分隔): 前端 桌面 技术胖 Electron 安装 前提:已经安装node,并且是10以上的版本 cnpm install electron --sav ...

  3. 阿里大神最佳总结Flutter进阶学习笔记,技术详细介绍

    开头 很多人工作了十年,但只是用一年的工作经验做了十年而已. 高级工程师一直是市场所需要的,然而很多初级工程师在进阶高级工程师的过程中一直是一个瓶颈. 移动研发在最近两年可以说越来越趋于稳定,因为越来 ...

  4. 会话技术CookieSession

    1会话技术简介 1.1存储客户端的状态 例如网站的购物系统,因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态. 会话技术是帮 ...

  5. JAVA web 会话技术CookieSession

    会话技术,指的是从打开浏览器开始访问某个站点,到关闭浏览器的整个过程,称为一次会话. 会话技术分为Cookie和Session. Cookie是指 将数据存储在本地,减少服务器的存储压力,安全性不好, ...

  6. linux运维需要哪些网络知识,Linux运维学习笔记-网络技术知识体系总结

    jTemplates部分语法介绍 1.{#if} {#if |COND|}..{#elseif |COND|}..{#else}..{#/if} Examples: {#if 2*8==16} goo ...

  7. LTE-5G学习笔记7---5G技术考试必看

    一.单项选择题 1.5G NR帧结构的基本时间单位是( C ) A) subframe B) slot C) Tc D) symbol 2.5G无线帧长是多少ms(B) A) 5 B) 10 C) 2 ...

  8. [学习笔记]数字电路技术

    数电可以说是单片机的基础吧,而且数电也没有模电难 74系列芯片汇总 数电课设 模数cp传送门 参考教材:数字电子技术基础_清华大学阎石版 数电考前总结 第一章 数制与码制 第二章 逻辑代数基础 第三章 ...

  9. RAC 学习笔记RAC 学习笔记(1)-技术介绍

    目标: RAC的事务模型,存储管理,是否依赖操作系统,有哪些关键技术,如果本地搭建测试环境的可行性. 相关文档(10g版本) ds_rac.pdf Oracle 真正应用集群数据表 (PDF) 200 ...

最新文章

  1. 机器学习 处理不平衡数据_在机器学习中处理不平衡数据
  2. 红橙Darren视频笔记 单例模式 volatile简析 ConcurrentModificationException
  3. mysql 无法链接, 输入密码失败
  4. 14:统计素数并求和
  5. 聚类分析在SPSS上的实现及分析
  6. html继承有哪几种方式,JS实现继承的几种常用方式示例
  7. 计算机窗口闪屏,电脑闪屏怎么办?如何解决电脑经常闪屏问题
  8. 被遗忘权的崩塌:当AI可以通过你的朋友了解你
  9. Primeng修改组件样式
  10. 系统重构的原则代码重构的原则
  11. PLSQL计算日期是当月第几周
  12. 黑鹰ASP.NET教程
  13. 再看同义变换在百度搜索广告中的应用总结
  14. 三国志战略版:斩首骑——张辽与王元姬不得不说的故事
  15. 计算机病毒占内存吗,蠕虫病毒占多少内存
  16. 我们都一样,不甘平凡又害怕努力
  17. xd怎么做页面滑动_Adobe XD中的滚动组功能详解!
  18. Mac 卸载 隐蔽软件 Core_Sync 的步骤
  19. 基于guided image filtering的图像去雾 opencv实现
  20. 移动端H5页面调试vConsole

热门文章

  1. 唯票房论的时代,小众电影如何大众化?
  2. python语音对话查询起始路和目的地_查询通话记录详情
  3. AltiumDesigner PCB设计规则
  4. jQuery——JavaScript 库
  5. 【Week9作业 B】东东学打牌【模拟】
  6. 区块链与merkle tree
  7. 解谜游戏 MU Complex 的过关图文攻略 (Episode2)(中)
  8. Hexo+buttterfly适合任意主题美化(悬挂动态修饰物)
  9. 7-5 福到了 (15 分)
  10. 坦克大战 —— 韩顺平