--> Cookie 是由做事器创建, 保存在客户真个小文本数据

Cookie 是由做事器创建

通过相应报头发送给WEB客户端

jsp会话跟踪机制是什么会话追踪是什么带你走进会话追踪技巧 GraphQL

存储在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\公众>