什么是会话?
会话可简单的理解为:用户打开 一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭 浏览器,整个过程称之为一个会话 。(打开浏览器 ——> 关闭浏览器)
会话过程中需要解决的一些问题;每个用户与服务器进行交互的过程中,各自会产生一些数据,程序要想办法保存每个用户的数据 。
例如:用户点击超链接通过一个 servlet 购买一个商品,程序应该保存用户购买的商品,以便用户点结账servlet时,结账servlet 可以得到用户购买的商品,为用户结账 ;那么用户购买的商品保存在 request 或者 servletContext 中 行不行?实际上都不行 ;
先说 request ;因为request 的 生命周期,仅限制在一次请求之间,每次请求都会生成一个新的 request 对象,这意味着保存在里面的东西,只能保存在一次请求之间,与我们想要的,不同的请求,都可以访问到数据的要求是相悖的;
再说 servletContext ,虽然 servletContext 被整个WEB中的 servlet 共享 ;满足了保存在里面的数据,可以被不同的请求都访问到;但是保存在其中数据,是按照键值对存储的,这样不同的请求,保存数据的时候,会造成数据的覆盖 ;
保存会话的两种技术
第一种:Cookie是客户端技术,程序把每个用户的数据以cookie的形式写给用户各自的浏览器 。这样,当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的数据去。这样,web资源处理的就是用户各自的数据了 ;
第二种:Session(由服务器创建)是服务器端技术,利用这个技术服务器在运行时可以为每一个 用户的浏览器创建一个其独享 的session对象 ;
由于 session 为用户浏览器独享,所以在访问服务器的 web 资源时,可以把各自的数据放在各自的 session 中,当用户再去访问服务器中的其他 web 资源时,其他 web资源再从用户各自的 session 中取出数据为用户服务 ;
当用户的浏览器第一次访问服务器的资源的时候,服务器为每个用户创建一个 session 对象,挂在服务器的屁股后面 ;当这个用户再次访问其他 web 资源的时候,不会再次创建 session 对象了,会去拿挂在服务器屁股后面的那个已经创建的 session 对象 ;Session对象的创建,发生在浏览器第一次访问服务器资源的时候 。
Cookie
javax.servlet.http.Cookie 用于创建一个 Cookie ,response 接口中定义了一个 addCookie 方法,它用于在其响应头中增加一个相应的 Set-Cookie 头字段。同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。
Cookie 类的方法:
构造器 :Public Cookie(String name,String value) ;
cookie的值 : setValue 与 getValue 方法
cookie的有效期,以 秒 为单位 : setMaxAge 与 getMaxAge 方法 ;
假如,没有设置有效期 ;则 cookie 随着浏览器的进程销毁而销毁 ;设置了cookie有效期,cookie将被保存在本地硬盘 ;
cookie的路径 : :setPath 与 getPath 方法;
写明路径,表示访问路径下面资源的时候,会带着cookie访问 ;访问服务器其他路径下的资源,将不会带着cookie访问 ;假如没有写路径,则有效路径是回写这个 cookie 的 servlet 程序的所在目录 ;比如/javaWeb/servlet/servletDemo 回写的cookie,则有效路径是 /javaWeb/servlet
cookie的域 : setDomain 与 getDomain 方法
cookie的名称 : getName 方法 ;
Cookie的细节
一个 cookie 只能标识一种信息 ,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE);要保存多个信息,需要多个cookie ;
一个 WEB 站点可以给一个web浏览器发送多个Cookie ,一个 web浏览器 也可以存储 多个web站点 提供的 cookie;浏览器一般只允许存放300个cookie,每个站点最多存放20个cookie, 每个cookie的大小限制为4KB ;如果创建了一个cookie,并将它发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器内存中),用户退出浏览器之后即被删除。
若希望浏览器将该 cookie 存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。 将最大时效设为0,则是命令浏览器立刻删除该cookie;浏览器没关闭,cookie也被删除 ;
删除 cookie 时,path 必须一致 ;否则不会删除掉 ;
删除cookie,其实就是新建一个和要删除的cookie,一样的cookie,它们具有一样的name,一样的path 路径,其实就是覆盖掉之前的cookie ;将其最大时效设置为0 ;
删除cookie
之前向浏览器回写了一个cookie,名字是 lastTime,路径是 /javaWeb ;现在想删掉浏览器保存的这个cookie ;
代码:
// 必须再创建一个和删除一样的cookie
Cookie cookie = new Cookie(“lastTime”,"") ;
// 设置path 必须一样
cookie.setPath("/javaWeb");
// 将最大时效设置为 0
cookie.setMaxAge(0);
// 添加到response中,回写给浏览器
response.addCookie(cookie);
Cookie 的坑
cookie这里面有个大坑,cookie的键和值中是不可以使用特殊字符的,比如:逗号,分号,等号等。
部分内容来自度娘,不足之处还望体谅_!!!