--> Cookie 是由做事器创建, 保存在客户真个小文本数据
Cookie 是由做事器创建
通过相应报头发送给WEB客户端
存储在WEB客户端
通过要求报头回传给做事器
--> Cookie 中含有的信息
Cookie的名字 、 Cookie的值
Cookie的失落效日期
Cookie的域名和路径
--> Http协议规定(担保不给浏览器太大压力):
1个Cookie最大4kb
1个做事器最多向1个浏览器保存20个Cookie
1个浏览器最多可以保存300个Cookie
--> Cookie可以做什么
记录用户名和密码
上岸论坛或信箱时, 可以选择记住用户名、 记住密码等
定制站点
根据客户爱好, 定制针对该客户的页面
定向广告
根据客户的爱好和取向, 定制他感兴趣的广告
保存购物车
购物车中的商品不能利用request保存,由于它是一个用户向做事器发送的多个要求信息
--> Cookie 的 name 和 value 的命名哀求(老版本的浏览器导致产生不了Cookie,现在的浏览器可以,但是只管即便避免利用)
不论是 name 和 value 都不能含有空格和以下任何字符
[ ] ( ) = , \"大众 / ? @ : ;
对付 name , 其命名还必须知足以下哀求
不能因此下单词或单词组合(大小写不一样都弗成)
» Comment、 Discard、 Domain、 Expires、 Max-Age、 Path、 Secure、 Version
不能以 $ 为开头
Cookie 类里对 name 的命名做了检讨, 以是必须知足以上两个条件
--> Cookie的path(理解)
Cookie的path并不是设置这个Cookie在客户真个保存路径!
!
!
Cookie的path由做事器创建Cookie时设置
当浏览器访问做事器某个路径时,须要归还哪些Cookie给做事器呢?这由Cookie的path决定。
访问路径包含Cookie路径则须要带回Cookie
例如:
<> aCookie.path=/day11_1/; bCookie.path=/day11_1/jsps/; cCookie.path=/day11_1/jsps/cookie/;
<> 访问:/day11_1/index.jsp时,归还:aCookie
<> 访问:/day11_1/jsps/a.jsp时,归还:aCookie、bCookie
<> 访问:/day11_1/jsps/cookie/b.jsp时,归还:aCookie、bCookie、cCookie
Cookie的path默认值:当前访问路径的父路径。例如在访问/day11_1/jsps/a.jsp时,相应的cookie,那么这个cookie的默认path为/day11_1/jsps/
方法:
Cookie[] cookies = request.getCookies(); 获取当前web运用下的所有cookie
public void setMaxAge(int expiry) 设置Cookie的最大时效,expiry单位是秒
没有显示设置时,默认为-1,浏览器关闭则删除相应的Cookie
设置expiry=0,命令浏览器急速删除该Cookie
response.addCookie( cookie );
该方法会把做事器上的操作\公众同步\公众到客户端,只有调用了这个方法,客户端才会生效
【 Session 】javax.servlet.http.HttpSession
由做事器创建, 存储在做事器上
Session 把客户状态记录在做事器上
访问动态资源比如 JSP、 Servlet 等会导致创建 Session
访问静态资源, 比如 html 、 image 等不会导致创建 Session
也可以通过 request.getSession( true ) 逼迫开启 Session
在 Java EE 规范中用 HttpSession 表示 会话
HttpSession是Servlet三大域工具之一(request、session、application)
Session 的实质 是 在 WEB 容器内 ( Tomcat ) 划分一块内存存放跟某个用户关联的数据
做事器会为每个客户端创建一个session工具,session就好比客户在做事真个账户,它们被做事器保存到一个Map中,这个Map被称之为session缓存!
每个 WEB 客户端在同一时候只能对应一个 Session ( 同一时候,客户端持有的编号与 Session 编号必须同等 )
可以通过修正 web.xml 设置 Session 的有效期
<session-config>
<session-timeout>60</session-timeout> <!-- 单位是分钟 -->
</session-config>
通过 Session 的 invalidate() 可以使 Session 失落效
比如, 用户注销时, 可以利用 该方法
做事器向客户端发送一个 JSESSIONID 的 Cookie 来标识客户
通过该 jsessionid 可以惟一地标识一个客户
该 jsessionid 的值便是当前 session 工具的 id , 在做事器是惟一的
做事器会自动天生 JSESSIONID 的 Cookie
它的 maxAge 默认为 -1 , 表示当前浏览器有效
一旦用户关闭浏览器, 立即失落效, 同时各个窗口之间互不共享
但, 当前浏览器窗口的子窗口可以共享父窗口的Cookie (亦即共享Session)
登录:
1、输入用户名和密码
2、点击登录 ,验证 用户名 和 密码 是否精确
3、如果 用户名 或 密码禁绝确,给出提示,并重新输入
4、如果 用户名 和 密码 都精确,
则 将用户的信息存储到 当前会话中 ( 目的是让当前客户真个多次要求都能获取到该用户的信息 )
注: 用户的信息一样平常以 工具的形式 存储到 会话 中,而不是仅仅存储一个用户名
得到session:
/ 通过 request 工具来得到 与当前的 客户端关联的 session 工具
// 通过 获取 要求报头 中的 cookie 然后得到 jsessionid 对应的值,再根据 jsessionid 来探求相应的 session 工具
// 如果没有找到 jsessionid 对应的 session 工具,则 容器会创建一个 新的 session 工具
HttpSession session = request.getSession();
// 如果是新创建的 session 工具,则通过 相应报头 向客户端发送一个 cookie ( 个中包含了 session id )
HttpSession 中的方法:
String getId() 返回 当前的 session 工具的 编号 ( 默认与客户真个 jsessionid 对应 )
boolean isNew() 判断当前的 session 工具是否是新创建的,如果是新创建的就返回 true ,否则便是 false
void setAttribute( String name , Object value ) 将 name - value 对 保存到 session 工具中
Object getAttribute( String name ) 根据 指定的 属性名称 得到相应的取值
void removeAttribute( String name ) 从 session 工具中移除指定属性名称对应的 name-value 对
【 URL Rewrite ( URL 重写 ) 】http://localhost:8080/loginservlet
http://localhost:8080/loginservlet;jsessionid=1234
String url = request.getContextPath() + \"大众/urlrewrite/success/login\"大众;
System.out.println( \"大众login action , before encode : \"大众 + url );
url = response.encodeURL( url ); //重写URL
System.out.println( \"大众login action , after encode : \"大众 + url );
如果要重写url生效,须要在重写前利用有关session的方法,比如request.getSession();
参数 url 须要从 当前 WEB 运用对应的路径开始,比如 /tracking/urlrewrite/action/login
重写前: /tracking/urlrewrite/action/login
重写后: /tracking/urlrewrite/action/login;jsessionid=XXXXXXXXXXXXXXXXX
response.encodeURL( String url )
response.encodeRedirectURL( String url )
http://localhost:8080/tracking/urlrewrite/action/login?hello=world
http://localhost:8080/tracking/urlrewrite/action/login;jsessionid=XXXXXXXXXXXXXXXXX?hello=world
适用场景:
客户真个 Cookie 被禁用时可以利用 URL 重写来实现会话追踪
【 隐蔽表单域 ( type=\"大众hidden\"大众 ) 】<input type=\公众hidden\"大众 name=\公众paramName\"大众 value=\公众paramValue\公众>