【001】什么是Session?
答:
Session来自javax.servlet.http.HttpSession类,其中HttpSession技术依靠Cookie技术
Session是服务端技术,服务器在运行时可以为每一个用户浏览器创建一个独享的HttpSession对象,由于session为用户浏览器独享,所以用户在访问服务器的web资源时,可以把各自的数据放在各自的session中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务
【002】Session的运行原理?
答:
HttpSession是一个域对象,其实际上是使用了Cookie技术,由服务器向客户端写了一个特殊的Cookie,名字为“JSESSIONID”,值为session对象的id(唯一),path是当前应用
【003】如何获取session对象?
答:
调用request.getSession()方法可以获取一个session对象。
调用时如果携带含有JSESSIONID的Cookie,则按照id到服务器内存中找对应的HttpSession,
若没找到或浏览器没有携带该Cookie,则创建一个新的HttpSession对象,同时赋予新的JSESSIONID,写给客户端
若找到含有该ID的session,则返回该HttpSession对象,继续为用户服务
【004】Session的常用API有哪些?
答:
void setAttribute(String name, Object obj) :设置属性
void removeAttribute(String name) :移除属性
Object getAttribute(String name) :获取属性
void setMaxInactiveInterval(int interval) :设置最大非活动时间间隔(负值表永久)[秒]
invalidate() :手动销毁session
isNew() :判断session是否创建
getId() :获取session的id
【005】Session在什么情况下会被删除?
答:
① 程序调用HttpSession.invalidate()
② 距离上次收到客户端发送的sessionid时间间隔超过了session的最大有效时间
③ 服务器进程被停止
注意:
关闭浏览器只会使存储在客户端浏览器内存中sessionid的cookie失效,并不会使服务器端的session对象消失
【006】Session是否在访问客户端时创建?
答:
不是,是在程序调用HttpServletRequest.getSession()这样的语句时才会被创建
【007】getSession() / getSession(true)、getSession(false)的区别?
答:
getSession() / getSession(true) :当session存在时返回,否则新建一个session并返回
getSession(false) :当session存在时返回,否则返回null、不会创建session
【008】Session的生命周期?
答:
① 客户端向服务器第一次发送请求的时候,request中并无sessionid
② 服务端会创建一个session对象,并分配一个sessionid,session对象保存在服务端
③ 当服务端程序处理完毕后,将sessionid以Cookie的形式传到客户端保存
④ 客户端再次发送请求,将sessionid同request参数一起发送,传递给服务端
⑤ 服务端根据传递过来的sessionid将这次请求(request)与保存在服务端的session对象联系
⑥ 循环 ③ ~ ⑤,直到session对象超时或被销毁
|
|