文章目录
1. HTTP协议
- 无状态协议
- 把每一次请求都看作是全新的请求
- 用户之前的访问记录、视频进度都不会被保存,每次需要输入密码验证
2. 状态管理的四种方法
2.1. 隐藏域
<input type="hidden" name="upwd" value="123">
2.2. URL重写
也叫做URL传参、URL传值
<%! String name = "zhangsan"; %>
<a href="url/show.jsp?uname=<%=name %>">URL重写</a>
2.3. Cookie
(1) Cookie存放于客户端
(2) Cookie是由服务器写入到客户端的,用来标识用户
(3) Cookie实质上是文本文档(不安全)
(4) 作用
<1> 跟踪用户
<2> 统计网页访问次数
<3> 简化登录(记住用户名、密码)
(5) Cookie使用
-
创建Cookie
Cookie cookie = new Cookie("UNAME",name);
-
设置有效时间(秒)
cookie.setMaxAge(300);
-
写入Cookie
response.addCookie(cookie);
-
获得Cookie – Cookie类型数组
Cookie[] cookies = request.getCookies();
-
对Cookie数组遍历
for(Cookie cookie : cookies){ cookie.getName() // 获得名称 cookie.getValue() // 获得值 }
-
删除Cookie
cookie.setMaxAge(0);
(6) Cookie分类
<1>内存中的Cookie
不设置有效时间或设置为(-1)
关闭浏览器自动消失
不写文件
<2>文件中Cookie –淘宝使用
设置有效时间
关闭浏览器后客户端保存Cookie文件
2.4 Session
2.4.1 会话
会话,在一段时间内,单个用户与Web服务器之间的一连串的交互过程。
- 一次会话可以包含多次请求、响应;
- 如果同一用户使用两个浏览器访问服务器上的同一资源,是两个会话
- 服务器会为每一个会话设置唯一的标识ID ,jsessionid
4.会话结束后,session自动清空
2.4.2 Session的使用
1. 创建Session
(1) 获得与当前请求关联的session , 如果没有,则创建新的session
HttpSession session = request.getSession();
(2)获得与当前请求关联的session,如果有,则返回当前session;
如果没有session,且参数为true,则创建新的session;
如果没有session,且参数为false,则返回null;
HttpSession session = request.getSession(false);
2. 添加属性
session.setAttribute("UNAME",request.getParameter("uname"));
3. 获得属性(强制类型转换)
String name = (String)session.getAttribute("UNAME");
4. 设置有效时间(默认1800秒,30分钟)
session.setMaxInactiveInterval(1800);
5. 清空session
session.invalidate();
6. 获得sessionID
session.getId();
3. Session、Cookie区别
- session是在服务器端保存用户信息,cookie是在客户端保存用户信息
- session的值可以保存对象,cookie的值是字符串
- session随会话结束而关闭,cookie可以长期保存在客户端(有效期)
- cookie通常用于保存不重要的用户信息,重要的信息使用session保存
4. 作用域/作用范围
-
JSP中,对象的作用域由小到大分为四种
page < request <session < application- page : 当前一个页面的范围,相当于this
- request:一个连续的请求,多次请求转发可以
- session:一个会话,跨越多个页面
- application: 整个应用程序
每一个范围都允许存放参数,参数以“键值对”形式存在,使用==setAttribute()方法存储参数,使用getAttribute()==方法获取参数
在JSP页面中,分别使用pageContext、request、session、application四个隐式对象调用相应的作用域。
在EL表达式中,分别使用pageScope、requestScope、sessionScope、applicationScope四个关键字表示不同的作用域,也可以省略(省略之后按作用域从小到大顺序查找,找到即停止)