session:会话
a。浏览网站:开始-关闭
a。浏览、付款、退出
c。电子邮件:浏览、写邮件、退出
开始-结束
session机制:
第一次
客户端第一次请求服务端时,(jsessionid和session匹配失败)服务端会产生一个session()对象
(该session对象可以用于保存该客户的信息)并且每个session对象都会有一个唯一的sessionID(用于区分)
服务端又会产生一个cookie,并且该cookie的key和value已确定,为name=JSESSIONID,value=服务端sessionID的值,然后服务端会在响应客户端的同时将该cookie发送给客户端,至此客户端 就有了一个cookie(该里面有一个JSSENSIONID)。因此客户端的cookie就可以和服务端的session一一对应(JSSENSIONID-sessionID)
第n次
客户端第二/n次请求服务端时:服务端会先用客户端cookie中的JSESSIONID去服务端的session中匹配sessionid,如果匹配成功(cookie jsessionid和session sessionid),说明此用户不是第一 次访问。
sessionID是session对象的唯一标记,在服务端中
JSESSIONID存储在cookie中,在客户端中,由服务端给客户端
例子:
服务端: 顾客(客户端)
服务端:存包处 商场(服务端)
顾客第一次存包 :商场判断此人是否之前已经存过包(通过你手里是否有钥匙)
如果是新顾客(没钥匙),分配一个钥匙给该顾客,钥匙会和柜子一一对应。
第二次/n次寸存包,商场判断此人之前是已经存过包的(通过你手里是否有钥匙)
如果是老顾客(有钥匙),则不需要分配,该顾客手里的钥匙会和柜子一一对应
session小结:
a. session 对象存储在服务端
b.session是在同一个用户请求时共享
c. 实现机制:第一次客户请求时产生一个sessionid并复制给cookie的jsessionid然后发给客户端,最终通过sessionID与JSESSIONID匹配
session 方法
String getId() 获取sessionId (字符串)
boolean isNew() 判断是否是新用户(第一次访问)
void invalidate() 使session失效(退出登录,失效,相当于收回钥匙或者钥匙作废)
session里面可以放东西
void setAttribute()
object getAttribute()
void setMaxInactiveInterval(秒):设置最大有效非活动时间。在这么长的时间内没有操作,则再次使用还需登录验证,如果在这么长时 间内操作,则上次登录有效
int getMaxInactiveInterval()获取最大有效非活动时间
session实例
在浏览器内从login.jsp按照zs/abc登录入welcome.jsp页面后,即使在session有效期内从URL栏直接输入welcome.jsp会导致空指针错误,因为request内数据只在一次内有效,从地址栏回车相当于发送第二次请求。但是,如果登录入welcome.jsp后在页面按F5刷新,则还会出现之前的内容,因为如下,浏览器会重复之前的动作。
session内的属性是同一次会话共享,只要还没结束,就一直能获取里面的内容。但是更换浏览器则不行。