从客户端打开浏览器开始访问服务器,到服务器给客户端响应数据,客户端继续访问服务器,直到客户端关闭浏览器,整个过程称为一次客户端和服务器之间的会话
在这个会话的过程中我们可以保存用户在整个会话过程中的数据,不管用户发起了多少次请求,数据都可以保存在其中,在用户的任何一次请求中,都可以获取到前面已经保存的数据。要完成这个功能,就需要使用sun公司给我们提供的Cookie对象或者Session对象
Cookie对象主要是给客户端写数据,数据需要保存在客户端,Session对象主要是在服务器端创建和当前用户相关的一个容器,专门为每个不同的用户保存数据
问:目前我们对于浏览器和服务器的交互有了一定的了解,以及请求处理,响应处理有一定地了解,但是HTTP协议是没有记忆功能的,一次请求结束后,相关数据会销毁,如果第二次需要使用同样的数据,怒可能让用户再写一次
解决:web初期使用cookie技术,把我们请求需要共享的数据储存在浏览器端,可以避免用户的重复书写,但是只适合少量数据,不安全
session
Session:会话技术,从客户端打开浏览器访问服务器,到最后客户端关闭浏览器,整个过程称为一次会话。
在这个会话的过程中,服务器会针对每个客户端创建一个和客户端相关的唯一的临时容器,这个容器用于保存当前客户的所有信息。
并且在给客户端响应数据的时候,会给客户端回送一个唯一标识当前客户端相关的临时容器的id,在客户端下次访问服务器的时候,会携带这个id信息(cookie),在服务器端就可以找到和客户端相关的临时容器, 继续使用这个临时容器。
如果获取这个Session对象,为每个客户端服务:在servlet可以通过Request对象获取和当前客户端相关的唯一Session对象。在jsp中可以直接使用
sessionId
每个session都有一个唯一的sessionid,
session.getId();可以获取session的id
session的生命周期
Session称为服务器端用于保存用户的信息的容器。它主要针对浏览器而言。
Session对象到底什么时候创建的:
Session对象的创建时间是:程序中第一次调用getSession方法时,这时web服务器会创建Session对象。并把这个Session对象返回。
Session对象一旦创建好了就为后续用户的所有操作服务,主要是保存用户的一连串的操作的信息。只要用户一直在操作,那么这个Session对象就会一直存在。
Session的销毁时间
一般在web服务器中Session有默认的存活时间,一般是半小时。如果在30分钟内,用户一直没有做任何操作,这时服务器会当前这个Session自动的销毁。
不正常关闭服务器。正常关闭服务器,服务器会把这个Session对象使用io流中的序列化技术保存在tomcat/work目录下
在Servlet程序中手动的销毁Session对象。session.invalidate();
Session的存活时间可以在web.xml中配置也可以通过方法指定:
setMaxInactiveInterval(int interval); //单位是秒,一般是在存储值的时候进行设置
注意:这里的时间是以分钟为单位
会话的清除
设置会话失效:session.invalidate();
移除会话的一个属性:session.removeAttribute(key);
一次完整会话例
//在servlet中获取session对象
HttpSession session = request.getSession();
//设置session的存储时间
session.setMaxInactiveInterval(3);//3是秒
//把user数据放入作用域中
session.setAttribute("users",user);
//让session的作用域强制失效
session.invalidate();
session会话的作用域,从浏览器打开到结束
cookie
创建cookie:
在javax.servlet.http 包中有 Cookie类,它拥有接收2个参数的构造方法,可以创建一个Cookie对象。
Cookie(String name, String value) :name就是给cookie起一个名字,value是当前Cookie具体的数据。类似于一个map,通过name获取具体的值。
使用new就可以创建出一个cookie- 服务器端
获取cookie
需要使用HttpServletRequest对象中的getCookies方法,会得到一个Cookie数组,这是因为一个站点可能会存放多个Cookie数据
例如:Cookie[] cookies = request.getCookies();
得到Cookie数组之后,判断cookies数组是否存在 cookies == null,如果cookies存在,根据cookie的name去查找指定cookie
发送cookie
创建好Cookie对象之后,需要使用HttpServletResponse中的addCookie方法,将Cookie对象添加到响应中,然后发给客户端。
例如:response.addCookie(cookie); // 将cookie写到客户端
在Cookie对象中提供了getName可以获取Cookie的key值,提供的getValue可以获取key对应的value值,同时也可以使用setValue给当前的Cookie对象设置value值。
SetPath设置cookie可以访问资源路径
SetMaxAge() - 设置cookie的生存时间 ,单位是秒