Session&&Cookie

今天让我们看下关于session和cookie的相关知识
一.会话,什么是会话:用户打开一个浏览器,点开n个超链接,访问n个服务器的web资源然后关闭浏览器的过程被称为一个会话过程。
为什么会出现cookie和session:
因为Http协议是无状态的,他没有记忆功能,请求完毕便断开。无法进行跟踪,cookie和session的出现就是为了进行会话跟踪。
二.Cookie
cookie是一种客户端技术。
cookie其实有两种,一种存在于浏览器缓存中(会话cookie),另一种存在于硬盘中。
通常情况下,cookie为sesion cookie(会话cookie),存在于浏览器内存中,当浏览器关闭时,cookie失效。java操作cookie的API中有一个方法setMaxAge,用于设置cookie的有效期。当设置了cookie的有效期之后,当浏览器关闭后,会把浏览器缓存中的cookie写到硬盘上存储起来。
我们启动一个浏览器,就相当于启动一个应用程序,而服务器返回的cookie首先是存在浏览器缓存中的,当浏览器关闭后,浏览器中的缓存中的cookie自然也被清空,而如果设置的有效期,这时,当浏览器关闭时会写到硬盘上存储起来。
三.Session
session是一种服务器端技术
每次我们创建一个session时都会有一个对应的sessionId,相应的名字为JSESSIONID,然后将这个sessionId的信息写入Cookie中,但这个cookie是存在于浏览器进程中的,不会写入客户机的磁盘中。所以我们会在同一个浏览器中使用同一个session,而当我们关闭浏览器的时候,这个cookie就被销毁了,那么sessionId就没有了。
这时我们重新打开一个浏览器,之前cookie中存放的sessionId已经不存在了,这时服务器从HttpServletRequest对象中没有检查到SessionId
此时,服务器会在发送一个新的存有sessionId的Cookie到客户端的浏览器中,这时对应的是一个新的会话,而服务器上原来的session等到它的默认时间到了之后,便自动销毁。
由上可知,session的生命周期其实与浏览器的关闭与否并没有关系。
但是当关闭浏览器后,我们无法再通过request.getSession()来得到原来的Session,因为无法找到原来的SessionId了。每次会话都有自己的SessionId,唯一标识。
那么如果我们想在关闭浏览器后依旧能够获得原来的Session怎么办
这个时候,结合以上所讲的知识,我们可以写出如下代码
Session session=request.getSession();
Cookie cookie=new Cookie(“JSESSIONID”,session.getId());
cookie.setMaxAge(30*60*60);//设置cookie的有效期
//使得cookie会在关闭浏览器后写入本地磁盘中,当重新打开一个浏览器时,HttpServletRequest对象仍然可以找到原有的SessionId,便可获得原来的Session,实现共享session
response.addcookie(cookie);//将cookie写入浏览器

你可能感兴趣的:(javaweb)