session执行机制和session共享问题

session(内置对象) :会话
a.浏览网站:开始-关闭
b.购物:  浏览、付款、退出
c.电子邮件:浏览、写邮件、退出
    开始-结束就是一次会话


session机制:

客户端第一次请求服务端时,匹配客户端的jsessionid和服务端的sessionid失败,服务端会产生一个session对象(用于保存该客户的信息,自带sessionid,然后将sessionid复制一份给jsessionid,jsessionid会放在cookie里,响应时就会将cookie发给客户端,那么客户端就有一个jsessionid了); 
并且每个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-cookie的jsessionid

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

void setAttribute()
Object getAttribute();

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

示例:
登录


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

 

 

request请求作用域:

request请求登录成功后,请求转换跳转到check.jsp,这个时候直接地址栏回车发送第二次请求会报错,会出现空指针错误。

如果点击F5刷新,则浏览器会重复从login.jsp到check.jsp,则不会出现错误。

 

session的共享:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值