本文共 2745 字,大约阅读时间需要 9 分钟。
Cookie(客户端,不是内置对象):
Cookie是由服务端生成,再发送给客户端保存,其作用相当于本地缓存;
优点:提高访问服务端的效率 。缺点:安全性比较差;Cookie用途:解决了相同请求的数据共享问题
如:服务器使用Cookie来跟踪客户端状态。 保存购物车(购物车中的商品不能使用request保存,因为它是一个用户向服务器发送的多个请求信息) 显示上次登录名(也是一个用户多个请求)Cookie常用方法:
public Cookie(String name,String value);创建Cookie对象 void setMaxAge(int expiry):最大有效期(秒) Cookie[ ] ck=request.getCookies();服务端得到客户端发来的Cookie String getName():获取name(Cookie中的键) String getValue():获取value(Cookie中的值) response.addCookie():添加cookie信息,准备发送给客户端。特别注意:获取Cookie对象,只能一次将Cookie全部获取,可以利用遍历获取指定的数据。注意:在遍历前,要判断Coolie对象是否为null再进行获取。(原因:可能设置有效路径过后,没有Cookie信息,报空指针异常)Cookie设置存储方式:
临时存储(默认):存储在游览器的运行内存中,游览器关闭即失效(session的Cookie为临时存储) 定时存储:存储在客户端硬盘中,设置了有效期void setMaxAge(int expiry):最大有效期(秒) 注意:清除定时存储时间,用游览器清除历史功能完成!Cookie设置有效路径:
只有当请求此路径时,某指定的cookie信息才会附带给服务器。 利用:new Cookie.setPath(" ")服务端发送Cookie给客户端,客户端在此请求服务器的过程:
->服务器创建Cookie对象 ->response.addCookie(Cookie cookie); ->页面跳转(转发,重定向) ->客户端获取cookie:request.getCookie(); ->客户端再次请求服务器,发送给服务器的有:请求信息和cookie信息特别说明如果默认情况下:每次请求服务器都将带上cookie信息,不管有没有使用,因此不同的请求应该带不同的cookie信息,此方法为设置:cookie的有效路径。
Session(服务端,内置对象):
Session用途:解决了发送不同请求的数据共享问题
Session常用方法:
request.getSession();(此函数有两种情况) 情况一:创建session对象(第一次访问,在客户端的发来的Cookie中没有找到JESSIONID,则会创建) 情况二:获取session对象(非第一次访问,则返回对应的session对象)。并且他的底层实现了下面session机制中的2、3、4步骤。session对象.getId();获取session对象的sessionid。
session对象.setMaxInactiveInterval():服务端session对象最大有效期(秒) ,默认为30分钟(设置未使用状态下服务器端自动删除sessionid)。 session对象.invalidate();使session失效(退出登录、注销) session对象.setAttribute(String name,Object value);存储数据 session对象.getAttribute(String name);返回Object类型数据 boolean isNew():判断是否是新用户(第一次访问):request.getSession().isNew()(用来判断是在创建session还是返回session)Session的存储方式:
1)客户端:借助Cookie的临时存储,关闭游览器,则客户端的JESSIONID将消失。 2)服务端:存储的是Session对象,对应的有一个sessionid。 如果当服务端的sessionId对象失效后(客户端的JESSIONID依然存在),再访问服务端创建了新的session对象,并将新的JESSIONID覆盖原有的JESSIONID。Session机制(原理):
1)客户端第一次请求服务端时(如:登录淘宝账户),登录成功后,服务端会产生一个session对象(用于保存该客户的信息,例如:订单,历史记录...)。特别注意:服务器第一次获取session时,如果没有session对象才会产生session对象(如:第一次执行requst.getSession时)。 进一步加深,如果访问jsp文件,那么会自动创建session(原因:JSP会自动转为Servlet文件,而session是jsp内置对象,即Servlet中创建了session对象),如果访问Servlet则必须获取session才会创建。2)并且每个session对象都会有一个唯一的sessionId(用于区分不同session)。
3)同时服务端又会自动产生一个cookie对象,将sessionId的值赋值给JESSIONID,最终cookie的name="JESSIONID",value=服务端sessionId的值;
4)最后服务端会在响应客户端的同时,自动执行response.addCookie(),将保存JESSIONIDD的cookie发送给客户端,至此客户端有了一个JESSIONID。
5)因此,客户端的"JSESSIONID"就可以和服务端的"SessionId"一 一对应 。
6)客户端第二/N次请求服务端时:服务端会先用客户端cookie中的JSESSIONID去服务端的session中匹配sessionid,如果匹配成功,说明此用户不是第一次访问,session对象中保存由该用户的所有行为信息(如:游览记录,订单...等),无需再次登录。
特别说明:在创建session对象时,底层已经帮我们执行了2),3),4)步骤。
session小考点:
requst.getSession(false)与requst.getSession(true)、requst.getSession()的区别 第一个:如果session缓存中cookie不存在,及session不存在,则返回null,不会创建session。 第二、三个:~~~~~~~~,创建session。转载地址:https://blog.csdn.net/qq_41877184/article/details/97314278 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!