标签:情况 equals 过期 pattern direct 目的 页面 通过 set
都是用来解决HTTP的无状态问题,由于HTTP每一次请求都相当于不同的用户向服务器发送请求。HTTP协议无法记住浏览器端是不是同一个用户。Cookie和Session都是为了解决一个用户的多次请求之间数据的共享问题,只是实现原理不同,只能实现一个用户多个请求之间的数据共享。
当浏览器的Cookie的过期时间还没到时,如果浏览器没有清空Cookie,那么就算关掉浏览器,Cookie也依然存在。
<session-config>
<session-timeout>30</session-timeout>
</session-config>
session.setMaxInactiveInterval(10);
即使使用了req.getSession().setMaxInactiveInterval(1000);
设置了session的过期时间,浏览器在关闭时,也会清空session的Cookie。这个设置过期时间是针对服务器端的,到了过期时间,服务器就会销毁该session。
- Cookie :记住我、网页皮肤、最近浏览商品
- Session:登录的用户信息、购物车(也可以用Cookie)
package com.it.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(urlPatterns = "/Login")
public class LoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
String readme = req.getParameter("readme");
// 判断用户名和密码是否为空
if("".equals(username) || "".equals(password)){
req.setAttribute("errorMsg","用户名和密码不能为空!");
req.getRequestDispatcher("/index.jsp").forward(req, resp);
return;
}
//1、创建Cookie
Cookie cookie1 = new Cookie("username", username);
Cookie cookie2 = new Cookie("password", password);
// 2、设置Cookie的访问规则, / 当前服务器有效,req.getContextPath() 当前项目有效
cookie1.setPath("/");
cookie2.setPath("/");
// 如果用户点击了readme,则设置Cookie的过期时间为1小时
if(readme != null) {
// 3、设置过期时间为1个小时
cookie1.setMaxAge(60 * 60);
cookie2.setMaxAge(60 * 60);
}else {
// 未点击readme,将cookie时间直接设置为过期
cookie1.setMaxAge(0);
cookie2.setMaxAge(0);
}
// 4、响应给浏览器
resp.addCookie(cookie1);
resp.addCookie(cookie2);
//5、跳转到登录成功页面
resp.sendRedirect(req.getContextPath() + "/success.jsp");
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<%
String path = request.getContextPath();
String username = "";
String password = "";
// 如果Cookie中没有值,则为空,有值的话设置为checked,让记住我的按钮动态选中
String readme = "";
Cookie[] cookies = request.getCookies();
if (cookies!=null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("username")) {
username = cookie.getValue();
readme = "checked";
}
if (cookie.getName().equals("password")) {
password = cookie.getValue();
}
}
}
%>
<base href="<%=path%>/">
</head>
<body>
<center>
<form action="Login">
<p>用户名:<input type="text" name="username" value="<%=username%>"></p>
<p>密码:<input type="text" name="password" value="<%=password%>"></p>
<p><input type="checkbox" name="readme" <%=readme%> >记住我</p>
<p><input type="submit" value="点击登录"></p>
</form>
</center>
</body>
</html>
// Servlet的service方法中设置值
req.getSession().setAttribute("username",username);
// jsp中获取值,2种方式
sessionId为:<%=session.getId()%>
用户名为:${sessionScope.username}
用户名为:<%=session.getAttribute("username")%>
Session与Cookie的原理以及使用小案例>从零开始学JAVA系列
标签:情况 equals 过期 pattern direct 目的 页面 通过 set
原文地址:https://www.cnblogs.com/itdqx/p/14802658.html