本文共 2205 字,大约阅读时间需要 7 分钟。
创建时间
Session 域是当一个浏览器访问服务器时创建,关闭服务器或过期时,销毁Session域。 请求时,在servlet中主动将数据保存在Cookie中,Cookie是浏览器当中的一个缓存区域。在结算请求时,将浏览器中存放的数据发送到服务器。创建Cookie
Cookie cookie=new Cookie("key","value");
响应给浏览器
response.addCookie(cookie);
默认情况下,Cookie 是会话级别,即打开浏览器,关闭浏览器为一次会话,如果不设置持久化时间,那么Cookie会存在浏览器内存中,浏览器关闭,Cookie内容销毁。
设置Cookie在客户端的存储时间
cookie.setMaxAge(int second);// 设置时间为秒// 如果设置持久化时间,Cookie 信息会被持久化到浏览器的磁盘文件中,过期会自动删除
设置Cookie的携带路径
如果不设置携带路径,默认情况下访问创建cookie的web资源相同的路径都携带cookie信息// 访问服务器下部署的所有工程都会携带cookiecookie.setPath("/");// 访问指定工程时都会携带cookie信息cookie.setPath("/Project");// 只有访问cookieServlet才携带cookie信息cookie.setPath("/Project/cookieServlet");
删除cookie信息
// 如果想要删除客户端已经存储的cookie信息,使用同名路径的持久化时间为0的cookie进行覆盖即可Cookie cookie = new Cookie("key", "value");cookie.setMaxAge(0);response.addCookie(cookie);
获取指定cookie信息
// 取出所有cookie信息Cookie[] cookies = request.getCookies();// 取出cookie信息中的nameString name = cookie.getName();// 取出cookie信息中的valueString value = cookie.getValue();
Session 技术是将数据存储在服务器端的技术,会为每个客户端创建一个内存空间存储客户的数据。客户端需要每次都携带一个标识ID去服务器中找属于自己的内存空间。Session 需要借助于Cookie 去存储客户端的唯一标识SESSIONID。
每一个用户访问服务器时,会给用户分配他们对于的存储空间,并且创建的存储空间有一个SESSIONID。第一次访问时会把对应的SESSIONID以Cookie的形式写给浏览器,下次再访问时,会携带SESSIONID找到当初创建的存储空间,在对应的存储空间当中取出数据。获取Session对象
HttpSession session = request.getSession();// 如果服务器没有该会话的Session对象,会创建一个新的Session返回。// 如果已经有了属于该会话的Session,直接将已有的Session返回。// 本质就是根据SESSIONID判断客户端是否在服务器上已经存在session了。
Session当中存/取数据
Session对象也是一个域对象,他也跟servletContext和request一样,有setAttribute,getAttribute,removeAttribute。// 存数据session.setAttribute("key", "value");// 取数据session.getAttribute("key");// 删除数据session.removeAttribute("key");
Session 的生命周期
创建: 第一次执行request.getSession时。 销毁: 1. 服务器关闭时。 2.session 过期/失效。 3.手动销毁 session.invalidate 作用范围: 默认在一次会话中,任何资源公用一个Session对象。JSESSIONID 持久化
默认情况下,第一次获取session对象时,会帮你创建一个session,可以获取该sessionid,会自动将id写入到cookie中。 当把浏览器关闭时,再次获取数据时,发现找不到了。是因为访问的时候要求带着JSESSIONID,由于默认情况下,存储cookie时会话级别的,关闭浏览器,cookie就没有了。所以再次打开浏览器,访问资源时,没有JSESSIONID,就会创建一个session,就取不到以前在session中存取的数据了。 解决办法 在写数据时,自己手动把session中的JSESSIONID写到cookie中,然后设置持久化时间和路径,路径与浏览器自动创建的路径一致。Cookie cookie = new Cookie("JSESSIONID", session.getId());cookie.setPath("/Project");cookie.setMaxAge(60);response.addCookie(cookie);
转载地址:http://idaen.baihongyu.com/