第五章 Cookie与session会话技术
1.cookies:
Cookie是一段不超过4KB的小型文本数据,由一个名称(Name)、一个值(Value)和其它几个用于控制Cookie有效期、安全性、使用范围的可选属性组成。
特点作用:减少服务器端存储压力,安全性不好,客户端可以清除。
1.2
1.2.1、如何创建Cookie对象
Cookie cookie = new Cookie(String name,String value);
– 其中name是cookie的名字, 用来区分cookie
– 其中value是cookie的值, 正是我们要保存的数据
1.2.2、如何将Cookie对象添加到响应中
response.addCookie(Cookie cookie)
– 将指定的Cookie对象添加到响应中,最后随响应发送给浏览器保存(底层还是通过set-Cookie响应头将Cookie值发送给浏览器)
–可以多次调用该方法,添加多个cookie,发送给浏览器
1.2.3、如何获取请求中的Cookie信息
request.getCookies()
– 返回请求中所有的Cookie对象组成的数组,如果请求中没有任何Cookie信息,该方法将会返回null。
– 如果请求中没有携带任何cookie,此处将会返回null.
1.2.4、setMaxAge方法 – 设置Cookie的最大生存时间(秒)
(1)如果不设置该方法,Cookie默认是会话级别的Cookie,是保存在浏览器的内存中, 随着浏览器关闭、内存的释放,Cookie也会跟着销毁。
(2)如果设置了该方法,并且是一个有效的时间,Cookie将会以文件的形式保存在浏览器的临时文件夹中。这样即使浏览器关闭,内存释放,保存在硬盘上的cookie文件会一直存在,当浏览器再次开启时,cookie仍然可以获取到。
1.2.5、Cookie的常用方法
(1)cookie.getName() – 获取Cookie的名字,没有setName方法,因为名字一旦确定就无法修改. (2)cookie.getValue() – 获取Cookie的值 (3)cookie.setValue() – 设置Cookie的值 (4)cookie.setMaxAge() – 设置Cookie的最大生存时间,
2.session:
将数据存储到服务器端,安全性相对较好,增加服务器的压力。
2.1.Session API
long getCreationTime();【获取Session被创建时间】 String getId();【获取Session的id】 long getLastAccessedTime();【返回Session最后活跃的时间】 ServletContext getServletContext();【获取ServletContext对象】 void setMaxInactiveInterval(int var1);【设置Session超时时间】 int getMaxInactiveInterval();【获取Session超时时间】 Object getAttribute(String var1);【获取Session属性】 Enumeration getAttributeNames();【获取Session所有的属性名】 void setAttribute(String var1, Object var2);【设置Session属性】 void removeAttribute(String var1);【移除Session属性】 void invalidate();【销毁该Session】 boolean isNew();【该Session是否为新的】
2.2Session的生命周期和有效期
Session在用户第一次访问服务器Servlet,jsp等动态资源就会被自动创建,Session对象保存在内存 里,这也就为什么上面的例子可以直接使用request对象获取得到Session对象。
如果访问HTML,IMAGE等静态资源Session不会被创建。
Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,无论是否对Session进行读写,服务器都会认为Session活跃了一次。
由于会有越来越多的用户访问服务器,因此Session也会越来越多。为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个时间也就是Session的超时时间。
Session的超时时间默认是30分钟,有三种方式可以对Session的超时时间进行修改
第一种方式:在tomcat/conf/web.xml文件中设置,时间值为20分钟,所有的WEB应用都有效
<session-config> <session-timeout>20</session-timeout> </session-config>
第二种方式:在单个的web.xml文件中设置,对单个web应用有效,如果有冲突,以自己的web应用为准。 <session-config> <session-timeout>20</session-timeout> </session-config> 第三种方式:通过setMaxInactiveInterval()方法设置 //设置Session最长超时时间为60秒,这里的单位是秒 httpSession.setMaxInactiveInterval(60); System.out.println(httpSession.getMaxInactiveInterval());
3.Session与Cookie的区别
Cookie Session
存储位置 浏览器 服务器端
安全性 可以分析存放在本地的Cookie进行Cookie欺骗,不安全 安全
存储数据量 不超过4k,并且很多浏览器都限制一个站点最多保存20个Cookie 没有限制
存储数据方式 只能存储字符串 可以存储对象
性能 存放在浏览器不占用服务器性能 占用服务器性能
思考与心得:
怎么利用Cookies保持状态呢?
cookie的特点:它的信息是存储在客户端的,每一次向服务器发送请求,cookie都会一起提交。它的优点是响应速度快;缺点就比较明显,它的安全性较低。
本文来自博客园,作者:taotooler,转载请注明原文链接:https://www.cnblogs.com/taolo/p/17225904.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?