龙空技术网

session 生命周期和经典案例-防止非法进入管理页面

java小悠 110

前言:

此刻兄弟们对“java设置session有效时间”大概比较关注,朋友们都想要分析一些“java设置session有效时间”的相关文章。那么小编同时在网摘上搜集了一些有关“java设置session有效时间””的相关文章,希望兄弟们能喜欢,大家快快来了解一下吧!

session 生命周期Session 生命周期-说明public void setMaxInactiveInterval(int interval) 设置 Session 的超时时间(以秒为单位),超过指定的时长,Session 就会被销毁。值为正数的时候,设定 Session 的超时时长。负数表示永不超时public int getMaxInactiveInterval()获取 Session 的超时时间public void invalidate() 让当前 Session 会话立即无效如果没有调用 setMaxInactiveInterval() 来指定 Session 的生命时长,Tomcat 会以 Session默认时长为准,Session 默认的超时为 30 分钟, 可以在 tomcat 的 web.xml 设置Session 的生命周期指的是 :客户端/浏览器两次请求最大间隔时长,而不是累积时长。即当客户端访问了自己的 session,session 的生命周期将从 0 开始重新计算。(解读: 指的是同一个会话两次请求之间的间隔时间)底层: Tomcat 用一个线程来轮询会话状态,如果某个会话的空闲时间超过设定的最大值,则将该会话销毁代码演示说明 Session 的生命周期创建CreateSession2

java复制代码public class CreateSession2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("CreateSession2 被调用"); //创建session HttpSession session = request.getSession(); System.out.println("CreateSession2 sid= " + session.getId()); //设置生命周期为 60s session.setMaxInactiveInterval(60); session.setAttribute("u", "jack"); //回复一下浏览器 response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.println("<h1>创建session成功, 设置生命周期60s</h1>"); writer.flush(); writer.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
创建ReadSession2
java复制代码public class ReadSession2 extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //System.out.println("ReadSession2 被调用..."); //1. 获取到session HttpSession session = request.getSession(); System.out.println("ReadSession2 sid= " + session.getId()); //2. 读取session的属性 Object u = session.getAttribute("u"); if (u != null) { System.out.println("读取到session属性 u= " + (String) u); } else { System.out.println("读取不到session属性 u 说明原来的session被销毁"); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
解读Session 的生命周期指的是两次访问 session 的最大间隔时间如果你在 session 没有过期的情况下,操作 session, 则会重新开始计算生命周期session 是否过期,是由服务器来维护和管理如我们调用了 invaliate() 会直接将该 session 删除/销毁如果希望删除 session 对象的某个属性, 使用 removeAttribu("xx")代码示例创建DeleteSession
java复制代码public class DeleteSession extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("DeleteSession 被调用..."); //演示如何删除session HttpSession session = request.getSession(); session.invalidate(); // 如果你要删除session的某个属性 //session.removeAttribute("xxx"); //回复一下浏览器 response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.println("<h1>删除session成功</h1>"); writer.flush(); writer.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
Session 经典案例-防止非法进入管理页面需求

只要密码为 666666, 我们认为就是登录成功

用户名不限制如果验证成功,则进入管理页面 ManageServelt.java ,否则进入 error.html如果用户直接访问 ManageServet.java , 重定login.html

html复制代码<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <h1>用户登录界面</h1> <form action="/cs/loginCheck" method="post"> u:<input type="text" name="username"><br/> p:<input type="password" name="pwd"><br/> <input type="submit" value="登录"> </form> </body> </html>
LoginCheckServlet
java复制代码public class LoginCheckServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("LoginCheckServlet 被调用.."); //功能-> 自己拆解 -> 逐步实现 //1. 得到提交的用户名和密码 String username = request.getParameter("username"); String password = request.getParameter("password"); if("666666".equals(password)) {//认为合法 //把用户名保存到 session HttpSession session = request.getSession(); session.setAttribute("loginuser", username); //请求转发到ManageServlet request.getRequestDispatcher("/manage").forward(request, response); } else { //请求转发进入到 error.html request.getRequestDispatcher("/error.html").forward(request, response); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
ManageServlet
java复制代码public class ManageServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //判断该用户是否登录过 HttpSession session = request.getSession(); Object loginuser = session.getAttribute("loginuser"); if(loginuser == null) {//说明该用户没有登录 //重新登录-> 请求重定向 //response.sendRedirect("/cs/userlogin.html"); response.sendRedirect(request.getContextPath() + "/userlogin.html"); return; } else { response.setContentType("text/html;charset=utf-8"); PrintWriter writer = response.getWriter(); writer.println("<h1>用户管理页面</h1>"); writer.println("欢迎你, 管理员:" + loginuser.toString()); writer.flush(); writer.close(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
error.html
html复制代码<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录失败</title> </head> <body> <h1>登录失败</h1> <!-- web工程路径专题 1. a 标签是 浏览器解析 2. 第一 / 被解析成  3. 如果没有 / 会以当前浏览器地址栏 的 工程路径../资源 去掉资源部分作为参考路径 --> <a href="/cs/userlogin.html">点击重新登录</a> </body> </html>

原文链接:

标签: #java设置session有效时间