把稳:一个servlet设置的cookie可以被同一个路径下或者子路径下的servlet读到,其他访问不到
路径是指url可以通过cookie.setPath()方法设置cookie的浸染范围
cookie适用场景自动登录,不须要填写用户名和密码浏览记录浏览器对付cookie是有限定的,同一域名下的cookie数量不能超过20个
session
session是记录在做事器端,获取session须要把sessionId通报给做事端,通过sessionId来取到对应的session,关闭浏览器,session不会被销毁,还可以通过sessionId找到该session,在同一个application下的servlet/jsp可以共享一个session,条件是同一个客户端窗口
操作session创建或获取session// 若为false,如果当前没有关联的session,如返回null;若为true,如果没有则会创建 默认是trueHttpSeesion session = request.getSession(true);
session的干系方法
// 返回session的创建韶光(单位毫秒)long getCreationTime();// 获取sessionIdString getId();// 返回客户端末了一次发送与该session会话干系的要求的韶光(单位毫秒)long getLastAccessedTime();ServletContext getServletContext();// session的过期韶光,单位秒// 也可以在web.xml中设置过期韶光,单位为分钟,tomcat默认是30分钟// <session-config>// <session-timeout15></session-timeout>// </session-config>void setMaxInactiveInterval(int var1);// 返回servlet容器在客户端访问时保持session会话打开的最大韶光间隔,单位秒int getMaxInactiveInterval();// 返回seesion会话中该名称的工具,没有返回nullObject getAttribute(String var1);// 返回该session会话中所有的名称Enumeration<String> getAttributeNames();// 将工具绑定到该session会话中void setAttribute(String var1, Object var2);// 移除指定名称的工具void removeAttribute(String var1);// 使该session无效void invalidate();// 是否为新创建的session(客户端还不知道该session)boolean isNew();
// 判断当前要求的session是否合法req.isRequestedSessionIdValid();// 判断当前要求是不是从URL发出的req.isRequestedSessionIdFromURL();// 判断当前要求是不是从cookie发出的req.isRequestedSessionIdFromCookie();
session的超时时间
可以在web.xml中配置session的超时时间
<session-config> <session-timeout>30</session-timeout> </session-config>
session的实现办法
session有两种实现办法 ①通过cookie来实现 第一次要求时,相应在相应头set-Cookie中 有jsessionId,把jsessionId放到cookie中,如果浏览器支持cookie,会把jsessionId放到cookie中 默认是存储在内存中的,没有存储在磁盘上,关闭浏览器就会失落效 可以进行持久化,利用cookie.setMaxAge
②通过URL重写来实现 response.encodeURL两个浸染
转码URL后加上jsessionIDsession的持久化由于session会占用内存资源,可以将session进行持久化放到文件或者数据库中保存,Tomcat中利用org.apache.catalina.session.PersistentManager和org.apache.catalina.session.StandardManager两个类来管理session的持久化
StandardManagerStandardManager是在web运用程序关闭时,对内存中的所有HttpSession工具进行持久化,保存在文件系统中,默认位置为tomcat下的
\work\Catalina\<主机名>\<运用程序名>\SESSION.ser
PersistentManager
PersistentManager比StandardManager更加灵巧,只要某个设备供应了实现org.apache.catalina.Store接口,就可以将HttpSession工具保存到对应的设备下
配置办法为
<!-- server.xml配置文件中Context标签下 --><Manager className="org.apache.catalina.session.PersistentManager"> <Store className="..."></Store></Manager>