一、什么是状态管理
因为web应用程序是基于Http请求的,而Http协议是
一个短连接的协议,一次请求一次响应之后,浏览器
和服务器之间就断开了连接,同一个用户下一次请求需要
重新建立连接,无法跟踪用户的状态信息,我们需要
跟踪同一个用户的多次请求,就对这些请求进行状态管理,
将他们当做是一个整体来看待
状态:多次交互过程中产生的数据
管理:对数据进行管理
状态管理方式:
cookie:浏览器客户端状态管理,将状态数据保存在浏览器上
session:服务器端状态管理,将状态数据保存在服务器内存中
二、Cookie状态管理
1、Cookie的执行原理
1>浏览器在第一次向服务器发送请求之后,
服务器可以创建一个cookie对象,然后通过
响应数据包的响应消息头带回给浏览器
Set-Cookie:name=lisi
2>浏览器接收并解析响应数据包,取出响应消息头
中的cookie信息,存储在浏览器端
3>在后续浏览器每次向服务器发送请求时,
会在请求数据包中以请求消息头方式将
cookie信息带给服务器
Cookie:name=lisi
4>服务器在接收到cookie之后,取出存储在
cookie中数据进行继续处理,从而完成
状态管理
2、cookie的相关API方法
1>创建cookie对象
Cookie c = new Cookie("name","value");
2>添加cookie到响应数据包中
response.addCookie(c);
3>获取浏览器传过来的所有cookie
Cookie[] cookies = request.getCookies();
4>获取cookie的name和value
String name = cookie.getName();
String value = cookie.getValue();
5>修改cookie的value值
cookie.setValue("value");
3、cookie的中文处理
cookie的name和value不能直接存储中文,
需要对中文进行编码
编码:URLEncoder.encode(中文内容,编码方式)
解码:URLDecoder.decode(获取内容,编码方式)
4、cookie的过期时间
默认情况下,cookie是存储浏览器内存中的,
只要浏览器不关闭,cookie就一直存在,
浏览器关闭之后,cookie就被删除了,
服务器可以通过setMaxAge()方法来修改
cookie默认的过期时间,单位是秒
取值:
>0:将cookie保存在浏览器的磁盘文件中,跟浏览器是否关闭无关,只有超过时间才会删除,
cookie就会一直存在,浏览器关闭,cookie被删除(默认值)
=0:立即删除浏览器上的cookie不存储,无论浏览器是否关闭
5、cookie的优缺点
1>cookie是将信息保留在浏览端,
可以被用户修改和删除导致不安全,
也可以被用户禁止
2>浏览器端保存的cookie数量是有限制(4k)
3>cookie的值只能ASCII字符串
三、Session状态管理
1、Session的执行原理
1>前端浏览器在第一次向服务器发送请求后,
服务器可以创建一个session对象,并给这个
session对象分配一个32位的唯一id,也就是
JSESSIONID,并将相关信息存入到session对象中
2>在服务器第一次给前端浏览器返回响应时,
会在响应数据包中以Set-Cookie的响应头
将JSESSIONID带回给浏览器
3>浏览器接收并解析响应数据包,取出响应消息头
中的JSESSIONID,以cookie的方式存储在浏览器端
4>在后续浏览器每次向服务器发送请求时,
都会在请求数据包中以Cookie请求消息头的方式
将JSESSIONID带回服务器
5>服务器接收并解析请求数据包,取出请求消息头中
的JSESSIONID,并根据JSESSIONID找到之前创建的
session对象,取出相关信息,从而完成状态管理
2、session相关的API
1>创建或查找session
HttpSession session = request.getSession();
2>往sesion中存储数据
session.setAttribute(String name,Object value);
3>从session中根据key获取value
Object value = session.getAttribute(String name);
4>从session中根据key移除键值对
session.removeAttribute(String name);
域对象:
1>HttpServletRequest
只在一次请求间传递共享数据
2>HttpSession
同一个用户的多次请求间传递共享数据
3>ServletContext
同一个web应用程序下传递共享数据
存储数据建议:尽量往小的域空间中存储数据,避免数据覆盖
转发:通过request传递数据
重定向:通过session传递数据
3、session的超时时间
默认情况下,服务器端的session对象超时时间为30分钟
修改session默认的生成时间:
1>通过tomcat下web.xml配置文件来进行修改,
单位是分钟,修改为0或负数表示永远不失效,
一般不建议修改这里,他是针对容器中
所有应用程序的所有session来进行设置的
2>session.setMaxInactiveInterval(int seconds);
设置某个session的生存时间,单位为秒
如果设置0或负数,表示session永远不会失效
3>session.invalidate();
立即销毁session对象
4>Tomcat容器关闭或重启后,所有应用中的所有session对象
都会被销毁
4、session的优缺点
1>session是将数据保存在服务器端,更加安全
2>session可以保存的数据类型更多,数据量更大
3>创建的session过多,数据量过大,会增加服务器内存压力
5、session的使用场景
1>登录验证
2>权限验证
3>验证码
1)验证码作用
防止机器人恶意攻击破坏系统
2)验证码原理
服务器端生成一串数据,然后以人能够
识别,但是机器人不能识别的方式发给
用户,用户接收到验证码之后,再将验证码
发送给服务器,服务器接收用户发送的验证码
和之前生成的验证码作比对
3)常见验证码
图片,邮箱,短信,滑动块,点文字,语音...
1、完成登录验证, 用户未登录不能执行员工的增删查改功能
2、登录成功在在右上角和左下角显示登录用户名称
3、退出
4、注册验证
1>账号必须是2-6位英文
2>密码2-6位纯数字
3>重复密码验证
4>验证码
5>判断账号是否重复
5、在emp表中添加一列,表示他所关联的用户
不同用户登录后,查看到的不同员工信息
6、分页查询
页码 页容 param1 param2
1 3 0 3
2 3 3 3
3 3 6 3
select * from emp limit 0,3;
select * from emp limit 3,3;
select * from emp limit 6,3;
页码:page
页容:pageSize
param1:(page-1)*pageSize
param2:pageSize
分页公式:
当前页:select * from emp limit (page-1)*pageSize,pageSize;
总记录数:select count(*) from emp; total
总页数pageCount :total%pageSize==0?total/pageSize:total/pageSize+1