cookie
Cookie(保存在浏览器) 是服务端在 HTTP 响应中附带传给浏览器的⼀个⼩⽂本⽂件,⼀旦浏览器保存了某个 Cookie, 在之后的请求和响应过程中,会将此 Cookie 来回传递,这样就可以通过 Cookie 这个载体完成客户端 和服务端的数据交互
Cookie : 是Servlet中的类,我们在jsp来创建
服务端再HTTP响应中,创建name=zhangshang
这也是创建cookie的方式
<%
//客户端请求
Cookie cookie = new Cookie("name","zhangshang");
//服务端响应
response.addCookie(cookie);
%>
创建cookie2.jsp来看看,发现之前的zhanshan已经在cookie中了,在response中响应了新的名字
Cookie 常⽤的⽅法
void setMaxAge(int age) 设置 Cookie 的有效时间,单位为秒
int getMaxAge() :获取 Cookie 的有效时间
String getName(): 获取 Cookie 的 name
String getValue() :获取 Cookie 的 value
cookie的读取
先在cookie2.jsp里进行创建
<%
Cookie cookie = new Cookie("name","lisi");
cookie.setMaxAge(20);
response.addCookie(cookie);
%>
我们再在客户端浏览器输入 http://localhost:8080/cookie.jsp 读取 然后for循环输出
cookie 不像session,一次会话结束后就没了,cookie是可以保存的,是一种文件在客户端中,比如浏览器知道你的账号密码,视频知道你上次看到哪了
默认值是-1,相当于关掉客户端就没了
这样可以设置时间为20s,20s内你登陆信息都在,你关掉浏览器它也在
<%
Cookie[] cookies = request.getCookies();
//在idea输出cookie的有效时间
cookies[0].setMaxAge(20);
System.out.println(cookies[0].getMaxAge());
%>
Session 和 Cookie 的区别
session:保存在服务器 保存的数据是 Object 会随着会话的结束⽽销毁 保存重要信息
cookie:保存在浏览器 保存的数据是 String 可以⻓期保存在浏览器中,⽆会话⽆关 保存不重要信息
存储⽤户信息: session:setAttribute("name","admin") 存
getAttribute("name") 取
⽣命周期:服务端:只要 WEB 应⽤重启就销毁,客户端:只要浏览器关闭就销毁。
退出登录:session.invalidate()
cookie:response.addCookie(new Cookie(name,"admin"))存
⽣命周期:不随服务端的重启⽽销毁,客户端:默认是只要关闭浏览器就销毁,我们通过 setMaxAge() ⽅法设置有效期,⼀旦设置了有效期,则不随浏览器的关闭⽽销毁,⽽是由设置的时间来决定。 退出登录:setMaxAge(0
之前我们用session写的登录,现在我们用cookie试试
先写一个cookie_login.jsp
<form action="/cookieLogin" method="post">
用户名<input type="text" name="username"><br>
密码<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
一个判断页面:CookieLoginServlet.java
@WebServlet("/cookieLogin")
public class CookieLoginServlet extends HttpServlet {
//定义成员变量,在其他方法中可以访问
private String myusername = "admin";
private String mypassword = "123123";
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取客户端输入参数
String username = req.getParameter("username");
String password = req.getParameter("password");
//判断,如果正确就从浏览器传到客户端
if (username.equals(myusername) && password.equals(mypassword)) {
//服务端创建cookie对象
Cookie cookie = new Cookie("name",username);
resp.addCookie(cookie);
//重定向
resp.sendRedirect("cookie_welcome.jsp");
}else{
resp.sendRedirect("cookie_login.jsp");
}
}
}
cookie_welcome.jsp,判断并输出
<%
Cookie[] cookies = request.getCookies();
for (Cookie cookie: cookies){
if (cookie.getName().equals("name")) {
out.write(cookie.getValue()+"欢迎回来");
}
}
%>
<a href="/lought1">退出</a>
退出页面CookieLoughtServlet.java
@WebServlet("/lought1")
public class CookieLogoutServleet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
for (Cookie cookie:cookies){
if (cookie.getName().equals("name")) {
cookie.setMaxAge(0);
resp.addCookie(cookie);
resp.sendRedirect("cookie_login.jsp");
}
}
}
}
来试试,先进入登录页面
我们登录看看
我们点一下退出
我们在里面设置了setMaxage(0),说明已经销毁,再次进入已经看不到了
这期就到这里了