Cookie饼干
a)什么是cookie
- Cookie是服务器通知客户端保存键值对的一种技术
- 客户端有了Cookie后,每次请求都发送给服务器
- 每个Cookie的大小不能超过4kb
b)cookie的创建
//创建cookie
Cookie cookie = new Cookie("name","覃圣航");
//通知客户端保存cookie
resp.addCookie(cookie);
c)服务器如何获得cookie
务器获取客户端的cookie只需要一行代码:Cookie[] cookies = req.getCookies();
d)Cookie值的修改(修改后的值不允许是中文)
工具类
public class Cookil_util {
public static Cookie findCookie(String name, Cookie[] cookie){
if (name == null || cookie==null||cookie.length==0){
return null;
}
for (Cookie cookie1 : cookie) {
if (name.equals(cookie1.getName())){
return cookie1;
}
}
return null;
}
}
方案一:
1、先创建一个要修改的同名Cookie对象
2、在构造器,同时赋于新的Cookie值
3、调用respose.addCookie(cookie);
// 1、先创建一个要修改的同名Cookie对象
// > 2、在构造器,同时赋于新的Cookie值
Cookie cookie = new Cookie("key1","newvalue1");
// > 3、调用respose.addCookie(cookie);
resp.addCookie(cookie);
resp.getWriter().write("已经修改了key1的值");
方案二、
1、先查找需要修改的Cookie对象
2、调用setValue()方法赋予新的Cookie值
3、调用response.addCookie()通知客户端保存修改
// > 1、先查找需要修改的Cookie对象
Cookie key2 = Cookil_util.findCookie("key2", req.getCookies());
// > 2、调用setValue()方法赋予新的Cookie值
key2.setValue("newvlaue2");
// > 3、调用response.addCookie()通知客户端保存修改
resp.addCookie(key2);
f)Cookie的生命控制
cookie的生命控制指的是如何管理Cookie什么时候被销毁(删除)。
setMaxAge()方法
- 正数,表示指定的秒数后过期
- 负数,表示浏览器一关,cookie就会被删除(默认是-1)
- 零,表示马上删除Cookie
Cookie key1 = Cookil_util.findCookie("key1", req.getCookies());
key1.setMaxAge(0);
resp.addCookie(key1);
g)Cookie有效路径Path的设置
练习:免用户名登陆
form-servlet
public class form extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.setContentType("text/html; charset=UTF-8");
String username = req.getParameter("name");
String password = req.getParameter("password");
if ("q".equals(username) && "123456".equals(password)){
resp.getWriter().write("登录成功");
Cookie cookie = new Cookie("name",username);
//一定呀设置setmaxage因为他的默认是-1,关闭浏览器就回消失
cookie.setMaxAge(30*30*30);
resp.addCookie(cookie);
}else {
resp.getWriter().write("登录失败");
}
}
}
form.jsp
<%--
Created by IntelliJ IDEA.
User: 29823
Date: 2022/2/13
Time: 22:05
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<!--
{cookie.name.value
cookie是el表达式中的隐式对象,得到一个cookie对象
cookie.name获取一个名字name的cookie对象
cookie.name.value获取一个name的value值
-->
<form action="/form" method="post" enctype="multipart/form-data">
用户名:<input type="text" name="name" value="${cookie.name.value}"><br>
密码:<input type="password" name="password"><br>
<input type="submit" name="sumbit">
</form>
</body>
</html>
Session会话
a)什么是Session
*Session是一个接口(HttpSession).
Session就是会话。他是用来维护一个客户端和服务器之间关联的技术。
每个客户端都有自己的一个Session会话
Session会话中,我们经常用来保存用户登录之后的信息
*
b)如何创建Session和获取(id号,是否为新)
request.getSession()他第一次调用时,创建Session会话。之后的调用都是,获取前面创建好的Session会话对象。
isNew():判断到底是不是刚创建出来的。true 刚创建,flash 之前获得。
应为每个客户端都有自己的一个Session会话,所以每个会话都有一个身份证,也就是ID值。而且这个ID时唯一的。getID()得到Session的会话id值
HttpSession session = req.getSession();
//判断Seesion是不是刚好创建
boolean aNew = session.isNew();
String id = session.getId();
resp.getWriter().write("创建了一个session");
resp.getWriter().write("<br>"+"创建的这个Session是不是刚好创建"+aNew);
resp.getWriter().write("<br>"+"创建这个的会话id时"+id);
c)Session域数据的存取
public void setSession(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
req.getSession().setAttribute("session1","value1");
resp.getWriter().write("存成功");
}
public void getSession(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
String session1 = (String)req.getSession().getAttribute("session1");
resp.getWriter().write(session1);
}
}
d)Session生命周期控制
public void setmaxinactiveinterval(int interval)设置session的超时时间(以秒为单位),超过指定的时长,session就会被销毁。负数永不抄袭
public int getmaxinactiveinterval()获取session的超时时间.
public void invalidate()让当前Session会话马上无效
Session默认的超时时长为30分钟,因为在Tomact服务器的配置文件web.xml中默认有以下的配置,它就表示配置了当前tomcat服务器下所有的Session超时配置默认时长为30分钟。如果要修改如下
< session-config>
< session-timeout>20
< /session-config>
e)浏览器和Session之间关联的技术内幕
Session技术,底层其实时基于Cookie技术实现的