Session与Cookie
用户会话
服务器无法识别每一次http请求来自哪,它只会接收到一个请求信号,就会出现一种问题:将用户的响应发送给别人。所以必须有一种技术来让服务器知道请求来自哪,它就是会话技术。
会话:服务器与客户端之间发生的一系列连续发生的请求和响应的过程,打开浏览器操作到关闭浏览器的全过程。
会话状态:指服务器和浏览器在会话过程中产生的状态信息;借助于回话状态,服务器能够将属于同一次会话的一系列请求和响应关联起来。
实现会话有两种方式:
-
session
-
cookie
session
属于同一次会话的请求都有一个相同的标识符,sessionID
</head> <body> <% String sessionid=session.getId(); %> <%=sessionid%> </body> </html>
session的常用方法:
String getID() 获取sessionID
void setMaxInactiveInterval(int Interval) 设置session失效时间,单位为秒
int getsetMaxInactiveInterva() 获取当前session失效时间,单位为秒
void invalidate() 设置session立即失效
void setAttribute(String key,Object value) 通过键值对的形式来存储数据
Object getAttribute(String key) 通过键值对的形式来得到数据
void removeAttribute(String key) 通过键值对的形式来删除数据
登录实例loginservlet.java
public class loginservlet extends HttpServlet { private String myusername=null; private String mypassword=null; @Override public void init(ServletConfig config) throws ServletException { myusername=config.getInitParameter("username"); mypassword=config.getInitParameter("password"); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } @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)){ HttpSession session = req.getSession(); session.setAttribute("username",username); req.getRequestDispatcher("welcome.jsp").forward(req,resp); } else { resp.sendRedirect("login.jsp"); } } }
登录页面login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="login" method="post"> <table align="center"> <tr> <td>用户名</td> <td> <input type="text" name="username" /> </td> </tr> <tr> <td>密码</td> <td> <input type="password" name="password"/> </td> </tr> <tr> <td> <input type="submit" value="登录"> </td> <td> <input type="reset" value="重置"> </td> </tr> </table> </form> </body> </html>
welcome.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <h1>欢迎回来!!</h1> <%=session.getAttribute("username")%><a href="logout">退出登录</a> </body> </html>
注销实例logoutservlet.java
@WebServlet("/logout") public class logoutservlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); session.invalidate(); resp.sendRedirect("login.jsp"); } }
web.xml
<servlet> <servlet-name>login</servlet-name> <servlet-class>ljx.loginservlet</servlet-class> <init-param> <param-name>username</param-name> <param-value>admin</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>123456</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>login</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping>
Cookie
Cookie是服务器在http响应中附带给浏览器的一个小文本文件,一旦浏览器保存了这个cookie,在之后的请求和响应中,会将此cookie来回传递,这样就可以通过cookie这个载体完成客户端和服务器的数据交互。
-
cookie的创建
Cookie cookie = new Cookie("name", "tom"); response.addCookie(cookie);
-
cookie的读取
Cookie[] cookie=request.getCookies(); for(Cookie cookie1:cookie){ out.write(cookie1.getName()+":"+cookie1.getValue()+"<br/>"); }
-
cookie的常用方法
void setMaxAge(int age) 设置cookie有效时间,单位为秒
int getMaxAge() 获取cookie有效时间
String getName 获取cookie的name
String getvalue() 获取cookie的value
cookie的应用实例
登录实例login_cookie.java
@WebServlet("/login_cookie") public class login_cookie extends HttpServlet { private String myusername="admin"; private String mypassword="123456"; @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 = new Cookie("name", username); cookie.setMaxAge(60*60*24*7);//有效期为一周 resp.addCookie(cookie); req.getRequestDispatcher("welcome_cookie.jsp").forward(req,resp); } else{ resp.sendRedirect("logincookie.jsp"); } } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login_cookie" method="post">
<table align="center">
<tr>
<td>用户名</td>
<td>
<input type="text" name="username" />
</td>
</tr>
<tr>
<td>密码</td>
<td>
<input type="password" name="password"/>
</td>
</tr>
<tr>
<td>
<input type="submit" value="登录">
</td>
<td>
<input type="reset" value="重置">
</td>
</tr>
</table>
</form>
</body>
</html>
注销实例logout_cookie.java
package ljx; 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("/ppt") public class logout_cookie extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { Cookie[] cookies=req.getCookies(); for(Cookie cookie1:cookies){ if(cookie1.getName().equals("name")){ cookie1.setMaxAge(0); resp.sendRedirect("logincookie.jsp"); } } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } }
welcome_cookie.jsp界面
<%-- Created by IntelliJ IDEA. User: 86136 Date: 2022/3/16 Time: 19:16 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[] cookies=request.getCookies(); for(Cookie cookie1:cookies){ if(cookie1.getName().equals("name")){ out.write("欢迎回来!"+cookie1.getValue()+"<br/>"); } } %> <a href="ppt">退出登录</a> </body> </html>
cookie和session的区别
-
session是保存在服务器的
保存的数据是object
会随着会话的结束而结束
保存重要信息
-
cookie是保存在里浏览器的
保存的数据是String
不会随着会话的结束而结束,可以长期保存
保存不重要信息
存储用户信息:
-
存: session:setAttributelname"admin"
-
取:getAttribute("name")
-
生命周期:
服务端:只要WEB应用重启就销器。
客户端:只要测览器关闭就销毁。
-
退出登录: sessioninvalidate()
-
存: cookie:response.addCookie(new Cookie(name,"admin"))
-
生命周期:不随服务端的重启而销毁。客户端:默认是只要关闭浏览器就销败。我们通过setMaxAge)方法设置有效期,一旦设置了有效期。则不随浏览器的关闭看销毁,而是由说置的时间来决定。
-
退出登录:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界