session (服务端)
Cookie (客户端,不是内置对象)
Cookie是由 服务端生成的.再发送给客户端保存。
相当于本地缓存的作用: 客户端(hello. mp4, zs/abc)->服务端(hello. mp4; zs/abc)
作用:提高访问服务端的效率,但是安全性较差。
Cookie:name=value
javax. servlet.http.Cookie
- public Cookie (String name, String value)
- String getName(): 获取name
- String getValue() :获取value
- void setMaxAge(int expiry);最大有效期 (秒)
服务端准备Cookie:
- response. addCookie (Cookie cookie)页面跳转(转发,重定向)
- 客户端获取cookie:request. getCookies() ;
- a.服务端增加cookie :response对象; 客户端获取对象: request对象
- b. 不能直接获取某一个单独对象,只能次性将 全部的cookie拿到
通过F12可以发现 除了自己设置的Cookie对象之外,还有一个名为JSESSIONID的cookie(和session相关)
3.使用cookie实现记住用户名 功能
(建议cookie中只保存英文、数字 ,否则需要进行编码、解码处理)
(cookie可以在客户端多个浏览器共享)IE 火狐
保留时间:
session :会话
- a.浏览网站:开始-关闭
- b.购物浏览、付款、退出
- c.电子邮件:浏览、写邮件、退出,开始-结束
session机制:
客户端第一次请求服务端时,服务端会产生一个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) 说明此用户不是第一次访问
栗子:
客户端:顾客
服务端:存包处 ——商场(服务端)
顾客第一次存包:商场判断此人是否是之前已经存过包(通过手里是否有钥匙)
如果是新顾客(没钥匙),分配一个钥匙给顾客;钥匙会和柜子 一一对应;
第二次/n次存包:商场判断此人是否是之前已经存过包(通过手里是否有钥匙)
如果是老顾客(有钥匙),不需要分配一个钥匙给顾客;顾客手里的钥匙会和柜子 自动一一对应;
session
a. session存储在服务端
b. session是在同一个用户(客户)请求时共享
c. 实现机制:第次客户请求时产生一个sessionid 并复制给cookie的jsessionid 然后发给客户端。最终通session的sessionid—jsessionid
session方法:
String getId() :获取sessionId
boolean isNew() :判断是否是新用户(第一次访问)void invalidate() :使session失效 (退出登录、注销)
setAttribute()getAttribute() ;
void setMaxInactiveInterval(秒) :设置最大有效非活动时间
int getMaxInactiveInterval () :获取最大有效非活动时间
示例: