一、Cookie(客户端)

1.基本概念:

Cookie(客户端,不是内置对象):Cookie是由 服务端生成的 ,再发送给客户端保存。(需要new Cookie())
相当于 本地缓存的作用;(不是内置对象),提高访问服务端的效率,但是安全性较差。

Cookie:    name=value   (kv对)
属于javax.servlet.http.Cookie类

综上:
a.Cookie不是内对对象,要使用必须new;
b.但是,服务端会 自动生成一个(服务端自动new一个cookie) name=JSESIONID的cookie  并返回给客户端;

2.提供常用的方法:
a.public Cookie(String name,String value)
b.String getName():获取name
c.String getValue():获取value
d.void setMaxAge(int expiry);最大有效期 (秒)

3.具体实例:

服务端准备Cookie:
    response.addCookie(Cookie cookie)
服务端通过页面跳转(转发,重定向)客户端获取cookie:  

    request.getCookies();

a.服务端增加cookie response对象;客户端获取对象request对象
b.不能直接获取某一个单独Cookie对象,只能一次性将 全部的cookie拿到。

通过F12可以发现  除了自己设置的Cookie对象外,还有一个name为 JSESSIONID的cookie

建议 cookie只保存  英文数字,否则需要进行编码、解码。

4.用途:

通常使用Cookie实现 记住用户名功能。

 

二、session(服务端)

a.浏览网站:开始-关闭
b.购物:  浏览、付款、退出
c.电子邮件:浏览、写邮件、退出
   一个会话的 开始-结束

1.基本概念:
session机制:

客户端第一次请求服务端时,(jsessionid-sessionid配对过程)服务端会产生一个session对象(用于保存该客户的信息); 
并且每个session对象 都会有一个唯一的 sessionId( 用于区分其他session);
服务端由会 产生一个cookie,并且 该cookie的name=JSESSIONID ,value=服务端sessionId的值;
然后 服务端会在 响应客户端的同时 将该cookie发送给客户端,至此 客户端就有了 一个cookie(JSESSIONID);
因此,客户端的cookie就可以和服务端的session一一对应(JSESSIONID - sessionID)

客户端第二/n次请求服务端时:服务端会先用客户端cookie种的JSESSIONID  去服务端的session中匹配sessionid,如果匹配成功(cookie  jsessionid和sesion sessionid),说明此用户 不是第一次访问,无需登录;

session:
a. session存储在服务端
b. session是在同一个用户(客户)请求时 共享
c. 实现机制:第一次客户请求时 产生一个sessionid 并复制给 cookie的jsessionid 然后发给客户端。最终 通过session的sessionid-cookie的jsessionid

2.提供常用的方法
a.String getId() :获取sessionId  
b.boolean isNew() :判断是否是 新用户(第一次访问)
c.void invalidate():使session失效  (退出登录、注销)

d.void setAttribute()
e.Object getAttribute();

f.void setMaxInactiveInterval(秒) :设置最大有效 非活动时间 
h.int getMaxInactiveInterval():获取最大有效 非活动时间 

3.具体实例:
登录

客户端在第一次请求服务端时,如果服务端发现 此请求没有 JSESSIONID,则会创建一个 name=JSESIONID的cookie  并返回给客户端

 

&&cookie和session的区别:

                             session               cookie
保存的位置          服务端                客户端
安全性                 较安全               较不安全
保存的内容         Object                   String