会话作用域

312 阅读3分钟

Session(会话域): Session机制属于B/S结构的一部分,session机制实际上是一种规范; 会话其实从session对象创建到session对象销毁,为一次会话; 一次会话中包含了多个请求; Session和request都是在服务器端的一个java对象; Session的主要作用是保存会话状态; 每个Session对象它的默认生命周期是30分钟,如果在30分钟期间,没有发送过任何一次请求,那么session对象则会被销毁; 如何创建获取session? HttpSession session=request.getSession(); 以上代码为获取session对象,当没有获取到session对象时,会自动创建session对象; HttpSession session=request.getSession(false); 但如果在括号中传入参数false,则表示,获取session对象,当没有获取到session对象时,则不会创建; session销毁除了手动销毁之外,还会有一个超时的销毁机制; 手动销毁的语法: Session.removeSession(); 或者 session.invalidate(); 而session的超时时长也是可以设置配置的;

60

以上代码的配置为设置session的超时时长为60分钟; 在这60分钟期间,如果浏览器没有发送过任何一次请求,那么session将会在60分钟之后自动销毁; 也可以使用另一种java语句,设置session的超时时长; session.setMaxInactiveInterval(30); 以上代码表示设置session超时时长为30分钟; 如何让Session对象不自动创建: Jsp其实本质就是一个Servlet对象,就算不使用request.getSession(); 在底层的java源代码当中,也会自动创建一个session对象,如何让底层源代码不创建session对象呢? 在jsp页面当中,使用<%page session=”false”%>即可; Cookie: 每个session对象都会关联一个sessionID,而每个sessionID都是以cookie的形式存在的;

image.png Cookie以键值对的形式存在; 对于session关联的cookie来说,这个cookie保存在浏览器的“运行内存”当中; Cookie除了可以保存在“运行内存”中,还可以保存在硬盘文件当中; 默认状态下,服务器在响应时,会发送一个sessionID个浏览器,而浏览器也会默认将该sessionID保存起来,以便下次发送请求时,保证请求的是同一个session对象; Cookie禁用,但cookie实际上是可以禁用的,当cookie开启为禁用时,服务器响应过来的sessionID,浏览器将不会再保存起来;相当于cookie将sessionID拒收; 当cookie一旦设置为禁用时,浏览器每次发送请求都将会是一个新的session对象; Cookie禁用后,session机制还能使用吗? 可以的,使用URL重写机制; 就算cookie禁用了,依然可以在每次发送请求时,保证请求的都是同一个session对象; 语法:

image.png

65D79060EF4A653742A1BEDF39E64E 在url路径的后面,加上一个分号,然后后面加上一个sessionID(编号)即可; 但使用URL重写机制,会增加开发成本; Cookie机制和Session机制其实都不是属于java的机制,它们是属于HTTP协议的一部分; Cookie.setMaxAge(参数);设置cookie的有效时间; 当参数设置为0时,表示删除该cookie,同时有删除同名cookie的作用; 当参数设置为负数时,表示不会将该cookie存储到硬盘当中,但会存储在“运行内存”当中;和不调用setMaxAge();方法是同一个效果; 注:只要设置了cookie的有效时间,那么该cookie就会保存到硬盘文件当中; Cookie.setPath(“/路径”);设置cookie的关联路径; 如果没有设置cookie关联路径,那么cookie的默认关联路径会是项目名下的子目录, 注:删除cookie时,需要设置path; 添加cookie时设置的path,和清除cookie的设置的path要保持一致,否则将无法清除cookie; cookie.setPath(request.getContextPath()); ———————————————— 版权声明:本文为CSDN博主「Jron.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/weixin_4725…