Session:
Session:
package session; import javax.servlet.ServletContext; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSession; /** * 前提条件:客户端必须启用会话才行,如果禁用会话则失效 * request.getSession(): * 获取session对象时先判断该对象是否存在 * 如果存在则获取session对象,如果不存在则创建session对象 * @author 13554 *URL:http://localhost:8080/sessionProject/session01 */ @WebServlet("/session01") public class Session1 extends HttpServlet { @Override protected void service(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws javax.servlet.ServletException, java.io.IOException{ //获取session对象 HttpSession session=req.getSession(); //获取session会话标识【唯一标识】 String sessionID=session.getId(); System.out.println("session会话标识:"+sessionID);//session会话标识:DD5212F160E4CD48340FAADFD16B1CAA //获取session创建时间【无论访问几次,该时间戳为第一次创建的时间戳】 System.out.println("session创建时间:"+session.getCreationTime());//session创建时间:1598103617292 //获取session最后一次访问的时间【以最后一次访问的时间戳为准】 System.out.println("session最后一次访问的时间:"+session.getLastAccessedTime());//session最后一次访问的时间:1598103617292 //判断是否是新的session对象【初次访问为是,再次访问url则为否】 System.out.println("判断是否是新的session对象:"+(session.isNew()?"是":"否"));//判断是否是新的session对象:是 // ServletContext context=session.getServletContext(); // context. // System.out.println(":"+session.); //session02重定向过来的 resp.getWriter().print("session.sname:"+req.getSession().getAttribute("sname")); resp.getWriter().print("request.rname:"+req.getAttribute("rname")); } } /** * COOKIE SESSION的区别 * 1、数据存放位置不同:cookie数据存放在客户的浏览器上,session数据放在服务器上。 * 2、安全程度zhi不同:cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session。 * 3、性能使用程度不同:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。 * 4、数据存储大小不同:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储与服务端,浏览器对其没有限制。 * 5、session的底层依赖cookie实现 */ |
package session; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSession; /** * session: * getAttribute(key)--获取域对象 * setAttribute(key,val)--设置域对象 * removeAttribute(key)--移除域对象 * request: * getAttribute(key)--获取域对象 * setAttribute(key,val)--设置域对象 * 请求转发: * 一次请求,session、request作用域都有效 * 重定向: * 两次请求,session作用域有效,request作用域无效 * @author 13554 *URL:http://localhost:port/sessionProject/session02 */ @WebServlet("/session02") public class Session2 extends HttpServlet { @Override protected void service(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws javax.servlet.ServletException, java.io.IOException{ //获取session对象 HttpSession session=req.getSession(); //设置session域对象 session.setAttribute("sname", "session02"); //设置request对象 req.setAttribute("rname", "request02"); //请求转发 // req.getRequestDispatcher("/view/index.jsp").forward(req, resp); //重定向 resp.sendRedirect("session01"); } } |
package session; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpSession; /** * Session设置超时时间:【一旦有操作session重新计时】 * 1.tomcat的web.xml中设置超时时间,默认超时时间30分钟,可以参照修改如下配置: * <session-config> * <session-timeout>30</session-timeout> * </session-config> * web文件路径 * /Servers/Tomcat v9.0 Server at localhost-config/web.xml * F:\Program Files\apache-tomcat-9.0.16\conf/web.xml * 2.设置最大不活动时间:【单位秒计】 *session.setMaxInactiveInterval(15); *3.立即销毁session: *session.invalidate(); *4.关闭浏览器或切换其他浏览器失效 *session底层依赖cookie,cookie对象默认存活时间为关闭浏览器,JSESSION *5.关闭服务器 *关闭服务器 session销毁 *session失效意味着此次会话结束,数据共享结束 * @author 13554 *URL://http://localhost:8080/sessionProject/session03 */ @WebServlet("/session03") public class SessionTimeOutSet extends HttpServlet { @Override protected void service(javax.servlet.http.HttpServletRequest req, javax.servlet.http.HttpServletResponse resp) throws javax.servlet.ServletException, java.io.IOException{ //获取session对象 HttpSession session=req.getSession(); System.out.println("是否新session?:"+(session.isNew()?"是":"否"));//15秒之后刷新URL 结果为是,15秒内结果为 否 //获取最大不活动时间 int time=session.getMaxInactiveInterval(); System.out.println("最大不活动时间:"+time+"秒");//第一次打印默认销毁时间:1800秒,第二次打印设置的时间:15秒 //设置最大不活动时间:【单位秒计】 session.setMaxInactiveInterval(15); //获取最大不活动时间 int time2=session.getMaxInactiveInterval(); System.out.println("最大不活动时间:"+time2+"秒");//15秒
//立即销毁session //session.invalidate();
} } |
Jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>INDEX界面</title> <!-- http://localhost:8080/sessionProject/view/index.jsp --> </head> <body> <% String sname=(String)request.getSession().getAttribute("sname"); String rname=(String)request.getAttribute("rname"); out.println("Session域对象sname:"+sname); out.println("request域对象rname:"+rname); %> </body> </html> |
备注:学习笔记