学习笔记-会话技术CookieSession
会话技术
会话:一次会话中包含多次请求和响应
一次会话:浏览器第一次给服务器资源发送请求会话建立,直到有一方断开会话结束
功能:在一次会话的范围内的多次请求间共享数据
方式:
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)
参数的取值:
- 整数:代表将Cookie数据写到硬盘的文件中持久化存储,参数代表Cookie的存储时间,到时间后会自动删除Cookie
- 负数:代表默认值,即关闭浏览器Cookie被销毁
- 零:代表删除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共享问题
- 在一个tomcat下部署了多个web项目默认情况下Cookie不能共享
- setPath(String path):设置Cookie的获取范围,默认情况下设置当前项目的虚拟目录
- 若设置cookie.setPath("/")(斜杠代表当前项目的根路径),则服务器中的多个web项目可以共享Cookie
- 不同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.有,不是第一次访问
- 响应数据:欢迎回来,您上次的访问时间为:显示时间字符串
- 写回当前时间给cookie
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的方式
- 服务器关闭
- 调用invalidate()方法
- 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相关推荐
- 个人学习笔记 ——【技术美术百人计划】图形 2.1 色彩空间介绍
个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 个人学习笔记 --[技术美术百人计划]图形 2.1 色彩空间介绍 图形 2.1 色彩空间介绍 一.色彩发送 ...
- Electron学习笔记(技术胖)
Electron学习笔记(技术胖) 标签(空格分隔): 前端 桌面 技术胖 Electron 安装 前提:已经安装node,并且是10以上的版本 cnpm install electron --sav ...
- 阿里大神最佳总结Flutter进阶学习笔记,技术详细介绍
开头 很多人工作了十年,但只是用一年的工作经验做了十年而已. 高级工程师一直是市场所需要的,然而很多初级工程师在进阶高级工程师的过程中一直是一个瓶颈. 移动研发在最近两年可以说越来越趋于稳定,因为越来 ...
- 会话技术CookieSession
1会话技术简介 1.1存储客户端的状态 例如网站的购物系统,因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态. 会话技术是帮 ...
- JAVA web 会话技术CookieSession
会话技术,指的是从打开浏览器开始访问某个站点,到关闭浏览器的整个过程,称为一次会话. 会话技术分为Cookie和Session. Cookie是指 将数据存储在本地,减少服务器的存储压力,安全性不好, ...
- linux运维需要哪些网络知识,Linux运维学习笔记-网络技术知识体系总结
jTemplates部分语法介绍 1.{#if} {#if |COND|}..{#elseif |COND|}..{#else}..{#/if} Examples: {#if 2*8==16} goo ...
- 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 ...
- [学习笔记]数字电路技术
数电可以说是单片机的基础吧,而且数电也没有模电难 74系列芯片汇总 数电课设 模数cp传送门 参考教材:数字电子技术基础_清华大学阎石版 数电考前总结 第一章 数制与码制 第二章 逻辑代数基础 第三章 ...
- RAC 学习笔记RAC 学习笔记(1)-技术介绍
目标: RAC的事务模型,存储管理,是否依赖操作系统,有哪些关键技术,如果本地搭建测试环境的可行性. 相关文档(10g版本) ds_rac.pdf Oracle 真正应用集群数据表 (PDF) 200 ...
最新文章
- 机器学习 处理不平衡数据_在机器学习中处理不平衡数据
- 红橙Darren视频笔记 单例模式 volatile简析 ConcurrentModificationException
- mysql 无法链接, 输入密码失败
- 14:统计素数并求和
- 聚类分析在SPSS上的实现及分析
- html继承有哪几种方式,JS实现继承的几种常用方式示例
- 计算机窗口闪屏,电脑闪屏怎么办?如何解决电脑经常闪屏问题
- 被遗忘权的崩塌:当AI可以通过你的朋友了解你
- Primeng修改组件样式
- 系统重构的原则代码重构的原则
- PLSQL计算日期是当月第几周
- 黑鹰ASP.NET教程
- 再看同义变换在百度搜索广告中的应用总结
- 三国志战略版:斩首骑——张辽与王元姬不得不说的故事
- 计算机病毒占内存吗,蠕虫病毒占多少内存
- 我们都一样,不甘平凡又害怕努力
- xd怎么做页面滑动_Adobe XD中的滚动组功能详解!
- Mac 卸载 隐蔽软件 Core_Sync 的步骤
- 基于guided image filtering的图像去雾 opencv实现
- 移动端H5页面调试vConsole