博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaweb 学习笔记 session与cookie会话技术
阅读量:3904 次
发布时间:2019-05-23

本文共 2205 字,大约阅读时间需要 7 分钟。

创建时间

Session 域是当一个浏览器访问服务器时创建,关闭服务器或过期时,销毁Session域。
请求时,在servlet中主动将数据保存在Cookie中,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

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/

你可能感兴趣的文章
前期准备:JDK源码下载
查看>>
前期准备:了解下Open JDK与Oracle JDK的区别
查看>>
android:layout_gravity 和 android:gravity 的区别
查看>>
工欲善其事,必先利其器之—使用ImageMagick处理图片
查看>>
工欲善其事,必先利其器之—使用PlantUML画UML图
查看>>
Android开发填坑之setUseWideViewPort
查看>>
前期准备:搭建代码阅读环境(Mac上搭建OpenGrok查看JDK源码)
查看>>
有关使用xsl输出csv格式文档的实践小结
查看>>
在Ubuntu 12.04 为 Eclipse 添加快速启动项
查看>>
GCC强大背后
查看>>
Android x86模拟器Intel Atom x86 System Image配置与使用方法
查看>>
shell脚本兼容linux/unix与windows/cygwin的基础(注意处理好CR, LF, CR/LF 回车 换行的问题)
查看>>
【分享】手把手教你使用U盘安装Ubuntu系统
查看>>
Ubuntu下adb无法识别android设备的解决方法
查看>>
使用U盘安装Ubuntu系统的实践小结
查看>>
编译cscope-15.8a遇到的问题与解决方案
查看>>
ubuntu下海信Hisense E920 usb连接不上的处理与adb的连接
查看>>
findbugs的ant脚本实践
查看>>
Ubuntu 12.04 安装 Subversion 1.7
查看>>
scp port 22: Connection refused
查看>>