重新学javaweb---cookiesession
会话技术
1.浏览器开始访问网站到访问网站结束期间产生的多次请求响应组合在一起叫做一次会话
会话的过程中会产生会话相关的数据,我们需要将这些数据保存起来。
Cookie:客户端技术
Session:服务器端技术
2.Cookie
Cookie是基于set-Cookie响应头和Cookie请求头工作的,服务器可以发送set-Cookie请求头命令浏览器保存一个cookie信息,浏览器会在访问服务器时以Cookie请求头的方式带回之前保存的信息
request.getCookies();response.addCookie(Cookie c);new Cookie(String name,String value)//Cookie在构造的时候就需要设定好cookie的名字和值getName();getValue();setValue();!!setMaxAge与getMaxAge方法
一个Cookie如果没有设置过MaxAge则这个Cookie是一个会话级别的Cookie,这个Cookie信息打给浏览器后浏览器会将它保存在浏览器的内存中,这意味着只要浏览器已关闭随着浏览器内存的销毁Cookie信息也就消失了.一个Cookie也可以设置MaxAge,浏览一一旦发现收到的Cookie被设置了MaxAge,则会将这个Cookie信息以文件的形式保存在浏览器的临时文件夹中,保存到指定的时间到来位置.这样一来即使多次开关浏览器,由于这些浏览器都能在临时文件夹中看到cookie文件,所以在cookie失效之前cookie信息都存在.
想要命令浏览器删除一个Cookie,发送一个同名同path的cookie,maxage设置为0,浏览器以名字+path识别cookie,发现同名同path,cookie覆盖后立即超时被删除,从而就删除了cookie.
setPath与getPath方法
– 用来通知浏览器在访问服务器中的哪个路径及其子路径时带着当前cookie信息过来
如果不明确设置,则默认的路径是发送Cookie的Servlet所在的路径
http://localhost/Day05/servlet/…
setDomain与getDomain方法
– 用来通知浏览器在访问哪个域名的时候带着当前的cookie信息.但是要注意,现代的浏览器一旦发现cookie设置过domain信息则会拒绝接受这个Cookie.我们平常不要设置这个方法
!案例:曾经看过的书
3.Session
Session 是一个域
!!作用范围:当前会话范围
!!生命周期:
当程序第一次调用到request.getSession()方法时说明客户端明确的需要用到session此时创建出对应客户端的Session对象.
当session超过30分钟(这个时间是可以在web.xml文件中进行修改的)没有人使用则认为session超时销毁这个session.
程序中明确的调用session.invalidate()方法可以立即杀死session.
当服务器被非正常关闭时,随着虚拟机的死亡而死亡.
*如果服务器是正常关闭,还未超时的session会被以文件的形式保存在服务器的work目录下,这个过程叫做session的钝化.下次再正常启动服务器时,钝化着的session会被恢复到内存中,这个过程叫做session的活化.
作用:在会话范围内共享数据
session 的原理:
request.getSession()方法会检查请求中有没有JSESSIONID cookie,如果有拿出他的值找到对应的session为他服务.
如果没有则检查请求的URL后有没有以参数的形式带着JSESSIONID过来,如果有则找到对应的Session为浏览器服务器
如果还找不到则认为这个浏览器没有对应的Session,创建一个Session然后再在响应中添加JSESSIONID cookie,值就是这个Session 的id
默认情况下,JSESSIONID 的path为当前web应用的名称,并且没有设置过MaxAge,是一个会话级别的cookie. 这意味着一旦关闭浏览器再新开浏览器时,由于JSESSIONID丢失,会找不到之前的Session
我们可以手动的发送JSESSIONID cookie,名字和path设置的和自动发送时一样,但是设置一下MaxAge,使浏览器除了在内存中保存JSESSIONID信息以外还在临时文件夹中以文件的形式保存,这样即使重开浏览器仍然可以使用之前的session
String prod = request.getParameter("prod");prod = new String(prod.getBytes("iso8859-1"),"utf-8");HttpSession session = request.getSession();Cookie jc = new Cookie("JSESSIONID",session.getId());jc.setPath(request.getContextPath());jc.setMaxAge(1800);response.addCookie(jc);session.setAttribute("prod", prod);
URL重写:(别和URL编码弄混了)
如果浏览器禁用了Cookie,浏览器就没有办法JSESSIONID cookie,这样就用不了Session了.
我们可以使用URL重写的机制,在所有的超链接后都以参数的形式拼接JSESSIONID信息,从而在点击超链接时可以使用URL参数的方式待会JSESSIONID,从而使用Session
将URL进行重写拼接上JSESSIONID的过程就叫做URL重写
request.getSession() --在URL重写之前一定要先创建出Session,才有Session id,才能进行重写response.encodeURL()--- 一般的地址都用这个方法重写response.encodeRedirectURL() --- 如果地址是用来进行重定向的则使用这个方法
request.getSession();//--在URL重写之前一定要先创建出Session,才有Session id,才能进行重写String url1 = request.getContextPath()+"/servlet/BuyServlet?prod=电视机";url1 = response.encodeURL(url1);String url2 = request.getContextPath()+"/servlet/BuyServlet?prod=冰箱";url2 = response.encodeURL(url2);String url3 = request.getContextPath()+"/servlet/PayServlet";url3 = response.encodeURL(url3);
url重写的方法一旦发现浏览器带回了任意cookie信息,则认为客户端没有禁用cookie,就不会再进行重写操作**
cookie是客户端技术
数据保存在客户端,这个信息可以保存很长时间
数据随时有可能被清空,所以cookie保存的数据是不太靠谱的
数据被保存在了客户端,随时有可能被人看走,如果将一些敏感信息比如用户名密码等信息存在cookie中,可能有安全问题
session是服务器端技术
数据保存在服务区端,相对来说比较稳定和安全
占用服务器内存,所以一般存活的时间不会太长,超过超时时间就会被销毁.我们要根据服务器的压力和session 的使用情况合理设置session的超时时间,既能保证session的存活时间够用,同时不用的session可以及时销毁减少对服务器内存的占用.
Session案例:
!!用户登录注销
防止表单重复提交
实现一次性验证码
重新学javaweb---cookiesession相关推荐
- 跳出圈子易,再入围城难,重新学编程,且学且珍惜
大学毕业后,去了家小制造企业做WMS. 一年后离职,做了公务员. 办公室,喝茶,看报,写写稿子,日子一天天混过. 猛然间发现,身边的朋友,都是居家过日子,混一天少两晌,自己也渐渐迷失了方向. 闲暇时间 ...
- 重学JavaWeb —— JSP,简单全面一发入魂
文章目录 JSP 特点 由来 本质 使用 JSP指令 page include taglib JSP脚本 JSP内置对象 JSP作用域 EL表达式 EL内置对象 EL取值方式 JSP动作元素 JSTL ...
- 重学JavaWeb —— Servlet,简单全面一发入魂
文章目录 Servlet 概述 基本使用 两个重要对象 请求转发 会话技术 Cookie Session 对比小结 其它相关对象 ServletContext ServletConfig 过滤器 概述 ...
- 重新学.Net[二]——从编译到运行
一个托管的程序,从书写代码到编译到最后运行,到底是怎么一个过程,一直有些混沌,好好看了下书,梳理了一下. 托管的程序是二次编译的,因此一个托管程序从第一次编译到最后的运行可以根据这两次编译的目的性不同 ...
- 重新学.Net[四]——效率和安全
用.Net就不得不考虑效率问题(这点和Java一样),到底有没有这种性能问题?性能问题有多大?而微软一直声称托管程序是安全的,这种安全性到底是指的什么东西?达到这种安全到底付出了什么东西?我一直对这些 ...
- 重新学.Net[一]——.Net的组成
.Net是一个广义的名词.它是一个平台或说是战略.在.Net诞生之初,微软在其一系列产品中都冠以.Net的标签.这也给很多人带来疑惑和不解,到底.Net中具体包含什么?这个问题不仅是我有,我想,甚至微 ...
- 对正则表达式又重新学了一遍,笔记方便以后查阅
学习地址:慕课网 JavaScript正则表达式 学习地址:慕课网 JavaScript正则表达式通配符:*测试正则表达式: 在线工具:http://regexper.com 也可以从npm上安装到本 ...
- 重学JavaWeb(11)JDBC
1. JDBC概念 1. 概念:Java Database Connectivity (Java连接数据库) 2. 本质:JDBC的本质就是Java定义的一套和数据库建立连接的规范(接口),想要用Ja ...
- 重学JavaWeb(3)JSON、AJAX
1. JSON 1. 概念:JavaScript Object Notation:JavaScript对象表示法 2. JSON的特点 (1)JSON是一种轻量级的数据交换格式 (2)JSON是一种独 ...
- 重新学javaweb---JSP乱码 图解
若看不清,在新页面中打开就可以了 下面加一个get/Post请求乱码解决(post一句话就可以解决,但用和get相同的方式处理也可以)
最新文章
- 在 Shell 脚本里使用数组
- 多媒体容器格式概述①
- MFC EDIT控件的使用记录
- php实现上传文件功能,简单实现php上传文件功能
- 激进or务实?HEVC、AV1 和私有Codecs现状
- 2016全球可再生能源投资额为2416亿美元
- 控制窗口不能拖拉出主窗口 Dialog And Window
- 让你更中立!腾讯微信进行灰度测试 “好看”变为“在看”
- 这个被程序员捧上神坛的IDEA插件出来后,我扔掉了Postman了
- hdoj2046骨牌铺方格题解+拓展(递推/斐波那契)
- 【2022年的STM32】 02-STM32总览
- 最新Erphpdown v13.11modown8.02主题破jie版去授权无域名限制版本
- jmeter 加密解密_Android 数据加密软件简单评测(上)
- ignite mysql_Ignite安装及使用
- 判断闰年简单逻辑运算符
- 【HTML+CSS】小米官网首页
- 图的有权最短路径及Dijkstra算法
- 传统实业巨头怎么搞产业互联网
- 数据清洗是什么?如何进行数据清洗?
- Seaborn调色板设置