网站被墙是谁做的,营销印刷网站,wordpress 获取微博,六安电子商务网站建设文章目录 session 生命周期和Session 经典案例-防止非法进入管理页面session 生命周期Session 生命周期-说明代码演示说明 Session 的生命周期创建CreateSession2创建ReadSession2 解读Session 的生命周期代码示例创建DeleteSession Session 经典案例-防止非法进入管理页面需求… 文章目录 session 生命周期和Session 经典案例-防止非法进入管理页面session 生命周期Session 生命周期-说明代码演示说明 Session 的生命周期创建CreateSession2创建ReadSession2 解读Session 的生命周期代码示例创建DeleteSession Session 经典案例-防止非法进入管理页面需求用户名不限制 login.htmlLoginCheckServletManageServleterror.html session 生命周期和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 的生命周期指的是 客户端/浏览器两次请求最大间隔时长而不是累积时长。即当客户端访问了自己的 sessionsession 的生命周期将从 0 开始重新计算。(解读: 指的是同一个会话两次请求之间的间隔时间) 底层: Tomcat 用一个线程来轮询会话状态如果某个会话的空闲时间超过设定的最大值则将该会话销毁
代码演示说明 Session 的生命周期
创建CreateSession2
public class CreateSession2 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(CreateSession2 被调用);//创建sessionHttpSession session request.getSession();System.out.println(CreateSession2 sid session.getId());//设置生命周期为 60ssession.setMaxInactiveInterval(60);session.setAttribute(u, jack);//回复一下浏览器response.setContentType(text/html;charsetutf-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
public class ReadSession2 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//System.out.println(ReadSession2 被调用...);//1. 获取到sessionHttpSession 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
public class DeleteSession extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(DeleteSession 被调用...);//演示如何删除sessionHttpSession session request.getSession();session.invalidate();// 如果你要删除session的某个属性//session.removeAttribute(xxx);//回复一下浏览器response.setContentType(text/html;charsetutf-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
!DOCTYPE html
html langen
headmeta charsetUTF-8title登录页面/title
/head
body
h1用户登录界面/h1
form action/cs/loginCheck methodpostu:input typetext nameusernamebr/p:input typepassword namepwdbr/input typesubmit value登录
/form
/body
/htmlLoginCheckServlet
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)) {//认为合法//把用户名保存到 sessionHttpSession session request.getSession();session.setAttribute(loginuser, username);//请求转发到ManageServletrequest.getRequestDispatcher(/manage).forward(request, response);} else {//请求转发进入到 error.htmlrequest.getRequestDispatcher(/error.html).forward(request, response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}
}ManageServlet
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;charsetutf-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
!DOCTYPE html
html langen
headmeta charsetUTF-8title登录失败/title
/head
body
h1登录失败/h1
!--
web工程路径专题
1. a 标签是 浏览器解析
2. 第一 / 被解析成 http://localhost:8080/
3. 如果没有 / 会以当前浏览器地址栏 的 http://localhost:8080/工程路径../资源 去掉资源部分作为参考路径
--
a href/cs/userlogin.html点击重新登录/a
/body
/html