上海源码网站建设公司,深圳市住房和建设局地址,漯河网站建设公司,网站建设步骤和流程Web 开发会话技术Session Session有什么用session基本原理session原理示意图session可以做什么如何理解Session Session常用方法Session底层实现机制原理分析图应用实例session实现原理动画 Session生命周期Session生命周期说明Session生命周期实例 作业布置 Session有什么用
… Web 开发会话技术Session Session有什么用session基本原理session原理示意图session可以做什么如何理解Session Session常用方法Session底层实现机制原理分析图应用实例session实现原理动画 Session生命周期Session生命周期说明Session生命周期实例 作业布置 Session有什么用
●思考两个问题 1.不同的用户登陆后, 不管该用户浏览网站的哪个页面, 都可显示登陆人的名字, 还可以随时去查看自己的购物车中的商品, 是如何实现的?
2.也就是说, 一个用户在浏览网站不同页面时, 服务器是如何知道是张三在浏览这个页面, 还是李四在浏览这个页面?
3.如果让我们来实现这个功能, 我会如何完成?
●解决之道-session技术 1.Session是服务器端技术, 服务器在运行时为每一个用户的浏览器创建一个其独享的session对象/集合.
2.由于session为各个用户浏览器独享, 所以用户在访问服务器的不同页面时, 可以从各自的session中读取/添加数据, 从而完成相关任务.
session基本原理
session原理示意图 1.当用户打开浏览器, 访问某个网站, 操作session时, 服务器就会在内存(在服务端)为该浏览器分配一个session对象, 该session对象被这个浏览器独占.
2.这个session对象也可看作是一个容器/集合, session对象默认存在时间30min(Tomcat的conf/web.xml中配置的), 也可修改. session可以做什么
1.网上商城的购物车.
2.保存登陆用户的信息.
3.将数据放入到Session中, 供用户在访问不同页面时, 实现跨页面访问数据.
4.防止用户非法登录到某个页面.
如何理解Session
1.session存储结构示意图 2.你可以把session看作是一种容器类似 HashMap, 有两列(K-V), 每一行就是session的一个属性.
3.每个属性包含有两个部分, 一个是该属性的名字(String), 另一个是该属性的值(Object).
Session常用方法
1.创建和获取Session
HttpSession hs request.getSession();
第1次调用是创建Session会话, 之后调用是获取创建好的Session对象.
2.向session添加属性
hs.setAttribute(String name, Object obj);
3.从session得到某个属性
Object obj hs.getAttribute(String name);
4.从session删除某个属性
hs.removeAttribute(String name)
5.isNew(): 判断是不是刚创建出来的Session.
6.每个Session都有1个唯一标识Id值. 通过getId() 得到 Session的会话 id值
Session底层实现机制
原理分析图
●session底层实现机制图解 应用实例
需求: 演示session底层实现机制-创建和读取session.
代码实现 1.创建src/com/zzw/session/CreateSession.java
public class CreateSession extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.获取session, 同时也可能创建sessionHttpSession session request.getSession();//2.获取该session的idString sessionId session.getId();System.out.println(当前sessionId sessionId);//3.给该session存放数据session.setAttribute(email, 978964140qq.com);//4.给浏览器回复response.setContentType(text/html;charsetutf-8);PrintWriter writer response.getWriter();writer.print(h1创建并操作session成功/h1);writer.flush();writer.close();}
}配置web.xml
servletservlet-nameCreateSession/servlet-nameservlet-classcom.zzw.session.CreateSession/servlet-class
/servlet
servlet-mappingservlet-nameCreateSession/servlet-nameurl-pattern/createSession/url-pattern
/servlet-mapping2.测试session创建的机制 http://localhost:8081/cookie_session/createSession, 注意抓包分析 3.创建src/com/zzw/session/ReadSession.java
public class ReadSession extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(ReadSession doPost()...);//1.根据浏览器携带的jsessionId获取session, 如果没有对应session会创建一个HttpSession session request.getSession();//2.输出存储在服务器端的session的idSystem.out.println(ReadSession 当前session id session.getId());//3.读取当前session的属性Object email session.getAttribute(email);if (email ! null) {System.out.println(session属性 email email);} else {System.out.println(session中没有email属性);}//4.回复浏览器response.setContentType(text/html;charsetutf-8);PrintWriter writer response.getWriter();writer.write(h1读取session成功/h1);writer.flush();writer.close();}
}servletservlet-nameReadSession/servlet-nameservlet-classcom.zzw.session.ReadSession/servlet-class
/servlet
servlet-mappingservlet-nameReadSession/servlet-nameurl-pattern/readSession/url-pattern
/servlet-mapping4.测试session创建的机制 http://localhost:8081/cookie_session/readSession, 注意抓包分析 5.有了代码的支撑, 我们再回头看session的原理图, 就有更深刻地理解.
session实现原理动画
●服务器是如何实现一个session为一个用户浏览器服务的. Session生命周期
Session生命周期说明
1.public void setMaxInactiveInterval(int interval): 设置Session的超时时间(以秒为单位), 超过指定的时长, Session就会被销毁. 值为正数的时候, 设定Session的超时时长. 负数表示永不超时.
2.public int getMaxInactiveInterval(): 获取Session的超时时间.
3.public void invalidate(): 让当前Session会话立即无效.
4.如果没有调用setMaxInactiveInterval()来指定Session的生命时长, Tomcat会以Session的默认时长为准, Session的默认超时时间为30min, 可以在tomcat的web.xml中配置 5.Session的生命周期指的是: 客户端/浏览器两次请求的最大间隔时长, 而不是累积时长, 即当客户端访问了自己的session, session的生命周期将从0开始重新计算.
6.底层: Tomcat用一个线程来轮询会话状态, 如果某个会话的空闲时间超过设定的最大值, 则将该会话销毁.
Session生命周期实例
需求: 演示session的生命周期.
代码实现 1.创建src/com/zzw/session/CreateSession2.java
public class CreateSession2 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(CreateSession2 doPost()被调用...);//1.创建sessionHttpSession session request.getSession();System.out.println(CreateSession2 session的id为 session.getId());//2.设置生命周期, 即最大间隔时长为60s (60s内不访问, 删除)session.setMaxInactiveInterval(60);//3.设置属性session.setAttribute(username, 赵志伟);//4.返回给浏览器response.setContentType(text/html;charsetutf-8);PrintWriter writer response.getWriter();writer.write(h1设置session生命周期成功/h1);writer.flush();writer.close();}
}配置web.xml
servletservlet-nameCreateSession2/servlet-nameservlet-classcom.zzw.session.CreateSession2/servlet-class
/servlet
servlet-mappingservlet-nameCreateSession2/servlet-nameurl-pattern/createSession2/url-pattern
/servlet-mapping2.创建src/com/zzw/session/readSession2.java
public class ReadSession2 extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(ReadSession2 doPost() 被调用...);//1.获取sessionHttpSession session request.getSession();System.out.println(ReadSession2 sessionId session.getId());//2.读取session属性Object username session.getAttribute(username);if (username ! null) {System.out.println(session属性: username username);} else {System.out.println(找不到username属性);}//3.返回给浏览器response.setContentType(text/html;charsetutf-8);PrintWriter writer response.getWriter();writer.write(读取session成功);writer.flush();writer.close();}
}servletservlet-nameReadSession2/servlet-nameservlet-classcom.zzw.session.ReadSession2/servlet-class
/servlet
servlet-mappingservlet-nameReadSession2/servlet-nameurl-pattern/readSession2/url-pattern
/servlet-mapping3.测试. 访问createSession2后, 会在服务器创建一个只有60s的session, 如果在60s内没有浏览器没有访问, 那么在61s的时候, 浏览器携带该jsessionId访问服务器时, 服务器会再创建一个session, 并返回新的jsessionId.
如果时间没到60s, 那么访问服务器, 不会返回新的jsessionId; 如果时间超过60s, session已被销毁, 那么访问服务器, 会返回新的jsessionId. 4.创建src/com/zzw/session/DeleteSession.java, 销毁session
public class DeleteSession extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(DeleteSession doPost() 被调用...);//1.根据浏览器jsessionId获取sessionHttpSession session request.getSession();System.out.println(DeleteSession sessionId session.getId());//2.删除session属性session.removeAttribute(username);//3.销毁sessionsession.invalidate();//因为session是在服务端的, 所以session销毁之后无需返回浏览器//3.返回给浏览器response.setContentType(text/html;charsetutf-8);PrintWriter writer response.getWriter();writer.write(h1删除session属性成功/h1);writer.flush();writer.close();}
}配置web.xml
servletservlet-nameDeleteSession/servlet-nameservlet-classcom.zzw.session.DeleteSession/servlet-class
/servlet
servlet-mappingservlet-nameDeleteSession/servlet-nameurl-pattern/deleteSession/url-pattern
/servlet-mapping5.测试. 每次访问deleteSession, 都不会返回jsessionId.
解读: Session的生命周期
1.指的是两次访问session的最大间隔时间。
2.如果你在session没有过期的情况下, 操作session, 则会重新开始计算生命周期。
3.session是否过期, 是由服务器来维护和管理
4.如果我们调用了invalidate(), 会直接将该session删除/销毁
5.如果希望删除session对象的某个属性, 使用removeAttribute(“xx”)
作业布置
需求: 防止用户非法进入管理页面. 说明 1.只要密码是666666, 我们认为就是登陆成功. 2.用户名不限制. 3.如果验证成功, 则进入管理页面 ManageServlet.Java, 否则进入error.html 4.如果用户没有登陆过, 直接访问ManageServlet.java, 重定向到login.html
代码实现 1.新建web/login.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title用户登录/title
/head
body
h1用户登陆页面/h1
form action? methodpost用户名:input typetext nameusername /br/br/密 码:input typepassword namepwd //brbr/input typesubmit value登陆/
/form
/body
/html2.新建src/com/zzw/session/homework/ManageServlet.java
public class ManageServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {HttpSession session request.getSession();//1.获取登录用户名Object username session.getAttribute(username);if (username null) {response.sendRedirect(request.getContextPath() /login.html);}//2.返回给浏览器response.setContentType(text/html;charsetutf-8);PrintWriter writer response.getWriter();writer.write(h1用户管理页面/h1\n 欢迎你: 管理员 username);writer.flush();writer.close();}
}配置web.xml
servletservlet-nameManageServlet/servlet-nameservlet-classcom.zzw.session.homework.ManageServlet/servlet-class
/servlet
servlet-mappingservlet-nameManageServlet/servlet-nameurl-pattern/manageServlet/url-pattern
/servlet-mapping3.新建web/error.html
!DOCTYPE html
html langen
headmeta charsetUTF-8title失败页面/title
/head
body
h1登录失败/h1
a hreflogin.html点击返回重新登录/a
/body
/html4.新建src/com/zzw/session/homework/LoginCheckServlet.java
public class LoginCheckServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println(LoginCheckServlet doPost() 被调用...);//1.获取用户登陆数据request.setCharacterEncoding(utf-8);String password request.getParameter(pwd);//2.校验if (666666.equals(password)) {//如果校验成功, 获取用户名String username request.getParameter(username);//将用户信息存入sessionHttpSession session request.getSession();session.setAttribute(username, username);session.setAttribute(password, password);RequestDispatcher requestDispatcher request.getRequestDispatcher(/manageServlet);requestDispatcher.forward(request, response);} else {RequestDispatcher requestDispatcher request.getRequestDispatcher(/error.html);requestDispatcher.forward(request, response);}}
}配置web.xml
servletservlet-nameLoginCheckServlet/servlet-nameservlet-classcom.zzw.session.homework.LoginCheckServlet/servlet-class
/servlet
servlet-mappingservlet-nameLoginCheckServlet/servlet-nameurl-pattern/loginCheck/url-pattern
/servlet-mapping5.回填web/login.html
form action/cookie_session/loginCheck methodpost6.浏览器测试. 文章转载自: http://www.morning.jllnh.cn.gov.cn.jllnh.cn http://www.morning.dbrnl.cn.gov.cn.dbrnl.cn http://www.morning.yrmgh.cn.gov.cn.yrmgh.cn http://www.morning.gzxnj.cn.gov.cn.gzxnj.cn http://www.morning.yrcxg.cn.gov.cn.yrcxg.cn http://www.morning.tkqzr.cn.gov.cn.tkqzr.cn http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn http://www.morning.rszyf.cn.gov.cn.rszyf.cn http://www.morning.hwbmn.cn.gov.cn.hwbmn.cn http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.lrplh.cn.gov.cn.lrplh.cn http://www.morning.wrqw.cn.gov.cn.wrqw.cn http://www.morning.tqbyw.cn.gov.cn.tqbyw.cn http://www.morning.gyqnc.cn.gov.cn.gyqnc.cn http://www.morning.kjsft.cn.gov.cn.kjsft.cn http://www.morning.jqzns.cn.gov.cn.jqzns.cn http://www.morning.hdnd.cn.gov.cn.hdnd.cn http://www.morning.hryhq.cn.gov.cn.hryhq.cn http://www.morning.kjgdm.cn.gov.cn.kjgdm.cn http://www.morning.frmmp.cn.gov.cn.frmmp.cn http://www.morning.jjxnp.cn.gov.cn.jjxnp.cn http://www.morning.nlgmr.cn.gov.cn.nlgmr.cn http://www.morning.mlckd.cn.gov.cn.mlckd.cn http://www.morning.0dirty.cn.gov.cn.0dirty.cn http://www.morning.pljdy.cn.gov.cn.pljdy.cn http://www.morning.qyhcm.cn.gov.cn.qyhcm.cn http://www.morning.fnfhs.cn.gov.cn.fnfhs.cn http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.tgpgx.cn.gov.cn.tgpgx.cn http://www.morning.wgzgr.cn.gov.cn.wgzgr.cn http://www.morning.xnnpy.cn.gov.cn.xnnpy.cn http://www.morning.tckxl.cn.gov.cn.tckxl.cn http://www.morning.mrkbz.cn.gov.cn.mrkbz.cn http://www.morning.kkqgf.cn.gov.cn.kkqgf.cn http://www.morning.bcngs.cn.gov.cn.bcngs.cn http://www.morning.lyldhg.cn.gov.cn.lyldhg.cn http://www.morning.tfznk.cn.gov.cn.tfznk.cn http://www.morning.xrwsg.cn.gov.cn.xrwsg.cn http://www.morning.zglrl.cn.gov.cn.zglrl.cn http://www.morning.kwpnx.cn.gov.cn.kwpnx.cn http://www.morning.glnxd.cn.gov.cn.glnxd.cn http://www.morning.tnjff.cn.gov.cn.tnjff.cn http://www.morning.csnch.cn.gov.cn.csnch.cn http://www.morning.ndxss.cn.gov.cn.ndxss.cn http://www.morning.xflwq.cn.gov.cn.xflwq.cn http://www.morning.hnkkm.cn.gov.cn.hnkkm.cn http://www.morning.xcfmh.cn.gov.cn.xcfmh.cn http://www.morning.kbbmj.cn.gov.cn.kbbmj.cn http://www.morning.wpydf.cn.gov.cn.wpydf.cn http://www.morning.xppj.cn.gov.cn.xppj.cn http://www.morning.c7495.cn.gov.cn.c7495.cn http://www.morning.jfgmx.cn.gov.cn.jfgmx.cn http://www.morning.dhqyh.cn.gov.cn.dhqyh.cn http://www.morning.qrwjb.cn.gov.cn.qrwjb.cn http://www.morning.sryhp.cn.gov.cn.sryhp.cn http://www.morning.rmmz.cn.gov.cn.rmmz.cn http://www.morning.yllym.cn.gov.cn.yllym.cn http://www.morning.dswtz.cn.gov.cn.dswtz.cn http://www.morning.rdkqt.cn.gov.cn.rdkqt.cn http://www.morning.lkfsk.cn.gov.cn.lkfsk.cn http://www.morning.bwqcx.cn.gov.cn.bwqcx.cn http://www.morning.bhrbr.cn.gov.cn.bhrbr.cn http://www.morning.rfxyk.cn.gov.cn.rfxyk.cn http://www.morning.ljdhj.cn.gov.cn.ljdhj.cn http://www.morning.sqfrg.cn.gov.cn.sqfrg.cn http://www.morning.rbgwj.cn.gov.cn.rbgwj.cn http://www.morning.rzbgn.cn.gov.cn.rzbgn.cn http://www.morning.wklhn.cn.gov.cn.wklhn.cn http://www.morning.sfgzx.cn.gov.cn.sfgzx.cn http://www.morning.kqwsy.cn.gov.cn.kqwsy.cn http://www.morning.wtcd.cn.gov.cn.wtcd.cn http://www.morning.sgmis.com.gov.cn.sgmis.com http://www.morning.dmhs.cn.gov.cn.dmhs.cn http://www.morning.ckhry.cn.gov.cn.ckhry.cn http://www.morning.kwfnt.cn.gov.cn.kwfnt.cn http://www.morning.qrgfw.cn.gov.cn.qrgfw.cn http://www.morning.prhfc.cn.gov.cn.prhfc.cn http://www.morning.nlgyq.cn.gov.cn.nlgyq.cn http://www.morning.fcxt.cn.gov.cn.fcxt.cn http://www.morning.btjyp.cn.gov.cn.btjyp.cn