浏览网站:开始—》关闭=一次会话
购物:浏览——》付款——》退出
机制:
客户端第一次请求客户端时,服务端会产生一个session对象(用于保存该客户的信息);
并且每个session对象都会有一个唯一的sessionId(用于区分其他session);
服务端又会产生一个cookie,并且该cookie的name=JSEESIONID,value=服务端sessionId的值;
然后,服务端会在响应客户端的同时,将改cookie发送给客户端,至此客户端就有了一个cookie(JSESSIONID)
当客户端后来再请求服务端时,(jsessionid——sessionid)服务端根据客户端中的JSEESION去服务端的sessionid中匹配,如果匹配成功(cookie,sessionid和JSEESIONID),说明此用户不是第一次访问,无需在登陆。
例如:
租客:(客户端) 房间 和 房东(服务端)
租客第一次入住:房东判断一个人是不是这里的租客(根据他能否用钥匙进房间)。
如果是新租客(没钥匙,且已交定金),房东给租客一条钥匙;房间——钥匙 对应
当顾客第二次入住时,由于他是已经有钥匙了,所以房东不用再给他钥匙。租客的钥匙 和 房子对应
ps:假如钥匙丢了(客户端清缓存或清cookie),则需要重新发钥匙(重新匹配)
session:
a、存储在服务端
b、在同一个用户请求时共享
c、实现机制
session方法:
String getId():获取sessionId
boolean isNew():判断是否是新用户(第一次访问)
void invalidate():使session失效(退出,注销)
用法:session.invalidate();
setAttribute()
getAttribute():
void setMaxInactiveInterval(秒):设置最大有效时间(无操作时间)
int getMaxInactiveInterval():获取静止时间
示例:登录
所谓禁止时间,即在页面无操作
流程:在login页面填写资料,然后check页面检查是否uname=“lww” 学号“12345”,如果是则跳到welcome页面,如果不是则跳回login页面重新填写。
而登录成功后,由于设置了禁止时间,所以过了60秒后,再次直接访问welcome则需重新登录。
报错:如果直接在地址栏访问check页面会出现错误
原因:request只在同一次请求有效,由于“直接在地址栏访问check页面”属于第二次请求,获取不了数据(空指针)。如果按F5,则正常访问(浏览器会重新执行之前的动作,相当于重新一次请求)
同一个浏览器可以多个页面获取uname(共享)
cookie和session的区别