Cookie:

cookie是服务器在客户端存储的记录信息的文件。在servlet中,服务器可以在每次的HttpRequest中取到此次连接的cookie(调用getCookie,setCookie方法)。

cookie有两种,在servlet调用response.setCookie时决定,取决于是否给该Cookie设置过期时间

Session cookies - these are temporary and are erased when you close your browser at the end of your surfing session. The next time you visit that particular site it will not recognise you and will treat you as a completely new visitor as there is nothing in your browser to let the site know that you have visited before

不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie会话cookie一般不保存在硬盘上而是保存在内存里。

 

Persistent cookies - these remain on your hard drive until you erase them or they expire. How long a cookie remains on your browser depends on how long the visited website has programmed the cookie to last

设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。

存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。

Session:

session概念:

session即会话,用于标记一次完整的会话,同样记录用户的信息,与cookie的不同是cookie记录在客户端,session记录在服务器端。通过request.getSession获得该会话目前的session(返回HttpSession的引用)。如果第一次访问,服务器生成一个session给此会话。

session是会话级别的,不同浏览器窗口对应的是不同的session,不同session通过sessionID进行区分。如果一段时间没有访问,服务器会终止会话(停止维护此session)。客户端关闭后,该客户端对应的sessionId将再也不会被访问到,但清除时间还要等过期(因为http的无记忆性,不知道客户端是否关闭)。

session销毁的三种可能性:1. 服务器关闭。2. 客户端关闭后超时。3. 客户端无操作超时。

sessionID通常在客户端存储在cookie中,每次访问时携带,便于服务器确认会话是否存在,以及是哪个会话。通过request.getRequestedSessionId获得本次访问携带的sessionId(与上面的getSession略有不同)。

session实现方法:

session实现方法包括两种:cookie实现和url重写实现。

cookie实现:在cookie可以访问时,session默认存入cookie中。上面说到cookie有两种,其中Session cookie一般作为存放sessionID的存放地点(key:JSESSIONID,value:${sessionID})。

url重写实现:当cookie被阻止时,每次刷新浏览器页面都会重新生成一个sessionID,session无法正常工作。此时需要自己写程序重写url实现,调用方法:将所有需要访问session的链接,传入response.encodeURL()作为参数进行转码,结果将携带sessionID。

encodeURL有两种功能:1. 转码。2. URL后加入sessionID。此时url携带了sessionID,服务器自然可以判断。

session过期时间:

session的过期时间由服务器容器配置决定,如tomcat有自己软件配置用的web.xml(非项目中的那个),里面有服务器基础设置,包括session过期时间。

也可以在自己项目中的web.xml处,配置session-config中的session-timeout,即可设置session过期时间。

session的使用:

服务器端可以在session中存储任何东西,单元为Map<String,Object>,调用mySession.setAttribute(key,value)和mySession.getAttribute(key)即可。可以用于记录单次会话的访问次数,用户登录信息等。

同一个webapp的不同servlet/jsp可以共用同一个session,前提是在同一个浏览器页面或其子页面中。(这是与cookie的不同,cookie有路径的限制,一个页面的cookie只能被该页面所在路径及其子路径访问到)。

servletcontext:

servlet上下文,用于标记一个web应用,其中可以包含多个servlet。它同样可以用于记录用户信息,但scope比session和cookie都要大。服务器端的servlet类内可以通过this.getServletContext获得该类的引用。通过myServletContext.getAttribute和setAttribute进行读写。

只要是同一个webapp,即便更换浏览器页面,都共享同一个servletContext。(可以用于记录网站被访问次数)

可以用于记录单次会话的访问次数等。
posted on 2016-05-15 21:31  hh6plus  阅读(215)  评论(0编辑  收藏  举报