会话管理
来源:互联网 发布:中国禁枪怕被推翻 知乎 编辑:程序博客网 时间:2024/06/14 21:50
回顾重点内容: Servlet编程: 1)Servlet的生命周期: 构造方法:servlet对象创建时调用。只调用1次。 init方法(有参):servlet对象创建完之后调用,只调用1次。 service方法:每次发出请求时调用,调用n次。 destory方法: servlet对象销毁时调用。项目重新部署或服务器停止,sevlet对象会销毁。 2)ServletContext 对象 5大作用: a)获取web上下文路径。 context.getContextPath(); 简化版本: request.getContextPath(); b)获取全局参数 context.getInitParameter("name"); context.getInitParameterNames(); c)作为域对象使用 保存数据: context.setAttribute("name",Object); 获取数据: context.getAttribute("name") 移除数据: context.removeAttribute("name") d)用于转发 context.getRequestDispatcher("路径").forward(request,response); //简化版本 request.getRequestDispatcher("路径").forward(request,response); e)读取web资源文件 context.getRealPath("路径"); 得到资源文件的绝对路径 context.getResourceAsStream("路径") 得到资源,返回输入流 context.getResource("路径") 得到资源,返回URL 会话管理
会话管理入门
生活中的会话
我: 你最近有坐船吗? 小明: 有啊,昨天才刚坐 我: 这样啊!!前几天有船沉了,你没事吧? 小明: 不是吧?
程序中的会话
一次会话: 打开浏览器 -> 访问服务器 -> 关闭浏览器 场景1: 打开浏览器- > 访问网站 -> 登录页面 -> 输入用户名和密码(保存会话信息) -> 提交到后台 -> 校验成功 -> 返回用户首页(看到当前登录的用户名信息。。。)(取出会话信息)-》 关闭浏览器 使用什么技术保存这些会话信息???? 场景2: 打开浏览器 -> 浏览购物网站 -> 点击“购买” (把商品信息保存下来)-> 放入“购物车” -> 关闭浏览器 打开浏览器- > 浏览器购物网站- > 查看"购物车" -> 看到之前的商品信息- >付款购买-关闭浏览器 使用什么技术保存这些商品信息? 会话管理: 管理浏览器与服务器之间的会话过程中产生的会话数据!!!! 思考: 可以使用域对象来保存会话信息???? context域: 登录: 登录页面( 张三 context.setAttribute("name","张三") ) -> 访问用户主页(context.getAttribute("name")) 使用context域会覆盖之前的数据 request域: 登录: 登录页面( 张三 request.setAttribute("name","张三") ) -> 访问用户主页(request.getAttribute("name")) 使用request域之后,一定要使用转发技术来跳转页面。
会话管理技术
Cookie技术:会话数据保存在浏览器端。 Session技术: 会话数据保存在服务器端。
Cookie技术
Cookie技术的使用
Cookie对象: 1)创建Cookie对象,用于存储会话数据 new Cookie(java.lang.String name, java.lang.String value) 2)修改Cookie对象 void setPath(java.lang.String uri) void setMaxAge(int expiry) void setValue(java.lang.String newValue) 3)把cookie数据发送给浏览器保存 response.addCookie(cookie); 4)浏览器带着cookie访问服务器,服务器接收cookie信息 request.getCookies();
Cookie技术原理
1)服务器创建Cookie对象,保存会话数据,把Cookie数据发送给浏览器 response.addCookie(cookie); (响应头:set-cookie: name=jacky) 2)浏览器获取cookie数据,保存在浏览器缓存区,然后在下次访问服务器时携带cookie数据 (请求头: cookie: name=jacky) 3)服务器获取浏览器发送的cookie数据 request.getCookies();
Cookie细节
1)cookie的数据类型一定是字符串,如果要发送中文,必须先对中文进行URL加密才可以发送。 2)setPath(path): 修改cookie所在的有效路径。什么是有效路径? 如果把该cookie设置到某个有效路径下,然后当浏览器访问这个有效路径的时候,才会携带cookie数据给服务器。 3) setMaxAge(整数) : 设置cookie的有效时间 正整数: 表示超过了正整数的数值的时间,cookie就会丢失!!(cookie保存浏览器的缓存 目录)单位:秒 负整数: 表示如果浏览器关闭了,cookie就会丢失!(cookie保存浏览器内存) 0 : 表示删除同名的cookie 4)cookie可以有多个,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
案例-用户上次访问时间
案例-用户浏览过的商品
Session技术
引入
Cookie特点: 1)会话数据放在浏览器端 2)数据类型只能string,而且有大小限制的 3)相对数据存放不安全。 Session特点: 1)会话数据放在服务器端(服务器内存),占用服务器资源 2)数据类型任意类型,没有大小限制的。 3)相对安全
Session使用步骤
HttpSession对象: 1)创建HttpSession对象,用于保存会话数据 session = request.getSession(); 创建或获取session对象 2)修改HttpSession对象 void setMaxInactiveInterval(int interval) 设置session对象的有效时间 void invalidate() 手动销毁session对象 3)保存会话数据(作为域对象) session.setAttribute("name",Object); 保存数据 session.getAttribute("name") 获取数据 session.removeAttribute("name") 删除数据
Session原理
问题: 服务器怎么区分不同的浏览器会话?
前提: 可以从session对象取出数据必须是存放数据的sessinon对象!!!
1)浏览器1-窗口1(001): //1)创建HttpSession对象 HttpSession session = request.getSession(); 给session对象分配001 //2)保存会话数据 session.setAttribute("name", "jacky"); 2)浏览器1-窗口2(001): //1)得到session对象 HttpSession session = request.getSession(); 搜索001的session对象 //2)获取会话数据 String name = (String)session.getAttribute("name"); 可以得到!! 3)浏览器2(没有标记或不是001) //1)得到session对象 HttpSession session = request.getSession(); //2)获取会话数据 String name = (String)session.getAttribute("name"); 不可以得到! 4)新的浏览器1(没有标记或不是001) //1)得到session对象 HttpSession session = request.getSession(); //2)获取会话数据 String name = (String)session.getAttribute("name"); 不可以得到!! 1)服务器创建Session对象,服务器会给这个session对象分配一个唯一的标记JSESSIONID 2)把JSESSIONID作为Cookie发送给浏览器 3)浏览器得到JSESSIONID保存下来,在下次访问时携带这个JSESSIONID去访问服务器 4)服务器得到JSESSIONID,在服务器内存中搜索是否存在指定JSSESSINOID的session对象, 5)如果找到,则返回这个session对象 6)如果找不到,可能直接返回null,或者再创建新的session对象。 HttpSession session = request.getSession(); 结论: 通过JSESSIONID在服务器中查询对应的session对象。 3.4 Session细节 1)setMaxInactiveInterval(秒数): 设置session对象的有效时间 问题:session在什么销毁? 注意:不是浏览器关闭,session对象就销毁!!! 默认情况: 等待30分钟空闲时间,session对象才会销毁。
<!-- 设置全局的session对象的过期时间 (分钟)--> <session-config> <session-timeout>1</session-timeout> </session-config>
2)可以让JSESSIONID不会随着浏览器关闭而丢失!!!!
/** * 设置JSESSIONID的时间,不会随着浏览器关闭而丢失!*/ Cookie c = new Cookie("JSESSIONID",session.getId()); c.setMaxAge(1*30*24*60*60);//1个月 response.addCookie(c);
3)直接手动销毁sessino对象 invalidate(); 4) 创建或得到session对象 request.getSession() / request.getSession(true): 创建或得到session对象,查询session对象,如果没有sessino对象,则 创建新的session对象 request.getSession(false) 得到session对象。 查询session对象,如果session对象,直接返回null
案例-用户登录
总结: 1)会话管理: 浏览器与服务器之间会话过程中产生的会话数据 2)Cookie技术:会话数据保存在浏览器 核心的API: a)创建Cookie对象 Cookie c = new Cookie("name","value") b)发送给浏览器 respone.addCookie(c); c)浏览器发送cookie给服务器,服务器接收cookie Cookie[] cookies = request.getCookies() 3) Session技术: 会话数据保存在服务器(内存中) 核心API: a)创建或得到HttpSession对象 HttpSession session = request.getSession(true) 创建或得到 HttpSession session = request.getSession(false) 得到 b)使用HttpSession保存和获取,删除会话数据 session.setAttribure("name",Object); session.getAttribute("name"); session.removeAttrbute("name"); servlet总结: 第一天: tomcat服务器: 1)tomcat服务器如何使用‘ 2) web应用如何写 3) web应用如何部署? 第二天: http协议: http请求: HttpServletRequest对象: 获取请求数据 http响应: HttpServletResponse对象: 设置响应数据 第三天: servlet编程: 1)servlet生命周期 2)ServletConfig对象: 获取初始户参数 3)ServletContext对象: 5大作用 第四天: 会话管理 Cookie对象 HttpSession对象
阅读全文
0 0
- 管理会话
- 管理会话
- 会话管理
- 会话管理
- 会话管理
- 会话管理
- 会话管理
- 会话管理
- 会话管理
- 会话管理
- 会话管理
- 管理会话
- 会话管理
- 会话管理
- 会话管理
- 会话管理
- 会话管理
- 会话管理
- Java 经纬度计算两个点的之间的距离
- 结构体类型的创建
- ssh scp等消除每次问yes/no
- qt+opencv图像在控件上的显示 槽和信号的定义.
- ubuntu下运行第一个opencv程序
- 会话管理
- masonry
- unityVR全景视频制作
- 阿里云服务器安装mysql远程工具连接报Can't connect to MySQL server on 'X.X.X.X'(10038)
- DB2列转行,listagg的使用方法
- windows下建立PHP开发环境
- JSTL标签,EL表达式,OGNL表达式,struts2标签 汇总
- JavaMail发送邮件工具类(不带附件)
- 利用html和css做【雷达】效果