java学习笔记————本质篇2

10.Cookie:Cookie是由服务器创建,然后通过响应发送给客户端的一个键值对。
客户端会保存Cookie,并会标注出Cookie的来源//哪个服务器的Cookie
当客户端向服务器发出请求时会把所有这个服务器Cookie包含在请求中发送给服务器,这样服务器就可以识别客户端了


Cookie是服务器送给浏览器的小纸条!保存在客户端的!
当客户端再次发出请求时,会把这个服务器的cookie归还给服务器!服务器通过cookie来识别客户端状态! // 根据服务器,来区别发送cookie




Cookie的覆盖:如果服务器端发送重复的Cookie那么会覆盖原有的Cookie


Cookie添加与获取:客户端访问AServlet,AServlet在响应中添加Cookie,浏览器会自动保存Cookie。然后客户端访问BServlet,这时浏览器会自动在请求中带上Cookie
Cookie cookie = new Cookie("id", id);
response.addCookie(cookie);//响应cookie 到浏览器端  保存在浏览器端!


Cookie的生命: Cookie在客户端的有效时间
cookie.setMaxAge(-1) // 表示只在浏览器 内存中 存活。  一旦关闭浏览器窗口,那么cookie就会消失。
cookie.setMaxAge(0)  // 它表示cookie被作废!       作删除操作
cookie.setMaxAge(60*60)  // 表示cookie对象可存活1小时     当生命大于0时,浏览器会把Cookie保存到硬盘上


Cookie中根本不能保存中文: 除非先编码  再解码






11.Session:我们可以把一个会话内需要共享的数据保存到HttSession对象中!session底层是依赖Cookie的!!!     // javax.servlet.http.HttpSession接口表示一个会话


获取HttpSession对象:
request.getSesssion()  // 如果当前会话已经有了session对象那么直接返回,  如果当前会话还不存在会话,那么创建session并返回;
request.getSession(boolean)   // 当参数为true时,与requeset.getSession()相同。  如果参数为false,那么如果当前会话中存在session则返回,不存在返回null;


HttpSession是域对象:  // 下面三个是 Servlet中 可以使用的 域对象  而JSP中可以多使用一个域对象 pageContext
ServletContext:一个项目只有一个对象    //一个应用只创建一个ServletContext对象,所以在ServletContext中的数据可以在整个应用中共享,
//  只要不重启服务器,那么ServletContext中的数据就可以共享
HttpSession: 一个会话只有一个对象 //一个会话创建一个HttpSession对象,同一会话中的多个请求中可以共享session中的数据
HttpServletRequest:一个请求只有一个对象    //一个请求创建一个request对象,所以在同一个请求中可以共享request


API:
setAttribute(String name, Object value)
getAttribute(String name)
removeAttribute(String name)
getAttributeNames()




void setMaxInactiveInterval(int interval):设置session允许的最大不活动时间(秒),如果设置为1秒,那么只要session在1秒内不被使用,那么session就会被移除;


void invalidate():让session失效!调用这个方法会让session失效,当session失效后,客户端再次请求,
服务器会给客户端创建一个新的session,并在响应中给客户端新session的sessionId;




String getId():获取sessionId,其实它就是一个UUID,32位长的字符串;
int getMaxInactiveInterval():获取session可以的最大不活动时间(秒),默认为30分钟。当session在30分钟内没有使用,那么Tomcat会在session池中移除这个session;
long getCreationTime():返回session的创建时间,返回值为当前时间的毫秒值;
long getLastAccessedTime():返回session的最后活动时间,返回值为当前时间的毫秒值;




boolean isNew():查看session是否为新。当客户端第一次请求时,服务器为客户端创建session,
但这时服务器还没有响应客户端,也就是还没有把sessionId响应给客户端时,这时session的状态为新。




session的实现原理:
session底层是依赖Cookie的!// 服务端 session 与 sessionID绑定   客户端通过响应回的cookie("sessionID",sessionID)  在下一次请求时,通过发送此cookie,让服务端识别
1:首次访问服务器,创建一个session对象,存放到session池中。再把session的id保存到cookie中发送给浏览器。  //cookie("sessionID",sessionID)
2:浏览器保存的sessionId。session则保存在服务器中
3:当客户端再次访问服务器,客户端会归还cookie,即sessionId
4:服务器再通过sessionId知道对应的session 对象,进行操作.
5:保存sessionId 的cookie 是内存cookie,浏览器关闭,cookie 没了。 // cookie.setMaxAge(-1)


session与浏览器:
session保存在服务器,而sessionId通过Cookie发送给客户端,但这个Cookie的生命只能是-1,即只在浏览器内存中存在.
当用户再次打开浏览器访问服务器时,就不会有sessionId发送给服务器,那么服务器会认为你没有session,
所以服务器会创建一个session,并在响应中把sessionId保存到Cookie中发送给客户端。     
你可能会说,那原来的session对象会怎样?
当一个session长时间没人使用的话,服务器会把session删除了!
这个时长在Tomcat中配置是30分钟,可以在${CATALANA}/conf/web.xml找到这个配置,当然你也可以在自己的web.xml中覆盖这个配置!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值