Session原理及验证码案例 | 您所在的位置:网站首页 › session验证码有效期 › Session原理及验证码案例 |
概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession就是一个对象 快速入门: 获取HttpSession对象 HttpSession session = request.getSession();使用HttpSession对象 Object getAttribute(String name) void setAttribute(String name,Object value) void removeAttribute(String name)原理: 服务器怎么确保在一次会话的范围内多次获取的Session对象是同一个??? Session是依赖于Cookie的,假如在两个资源中都获取Session,那么第一次获取的时候会在内存中创建一个新的Session对象,并赋一个id给它,在响应的时候会返回一个set-cookie的响应头:key为JSESSIONID,value为xxx,服务器就会保存这个信息。在访问下面的资源的时侯,就会以cookie的形式带着JSESSIONID去访问,服务器自动获取这个cookie信息,并去内存中查找是否有id为xxx的session对象,找到了就把这个已有的session对象返回给当前需要获取的session。 细节: 当客户端关闭后,服务器不关闭,两次获取Session是否为同一个? 默认情况下:不是同一个,由上面的原理知道不是。 如果需要相同:可以创建一个cookie,key为JSESSIONID,value为session.getId(); 再设置一下最大存活时间 * Cookie c = new Cookie(“JSESSIONID”,session.getId()); * c.setMaxAge(60 * 60); * response.addCookie©; 客户端不关闭,服务器关闭后,两次获取Session是否为同一个? 不是同一个,服务器关闭后session对象肯定被销毁了,第二次再生成的session对象基本上不可能和原来的一样。但是要保证数据不会丢失。tomcat自动帮助我们完成钝化和活化,但是idea只能钝化不能活化,因为重启服务器的时候,idea会将work目录删了重新建一个,这样愿来被钝化的文件就没了。session的钝化:在服务器正常关闭之前,将session对象系列化到硬盘上session的活化:在服务器启动后,将session文件转化为内存中的session对象即可session什么时候被销毁 服务器关闭session对象调用方法invalidate();session默认失效时间30分钟 可以修改,在web.xml中添加下面的配置来覆盖原来tomcat的配置 30Session特点 session用于存储一次会话的多次请求的数据,存在服务器端session可以存储任意类型,任意大小的数据 |
CopyRight 2018-2019 实验室设备网 版权所有 |