5、其他相关
5.1 Session原理
session 可以放在文件、内存中或数据库都可以,是以键值对的形式存储。Session 也是一种 key-value 的属性对。
当程序需要为某个客户端的请求创建一个 session 的时候,服务器首先检查这个客户 端的请求里是否已包含了一个 session 标识 - 称为 session id,如果已包含一个 session id 则说明以前已经为此客户端创建过 session,服务器就按照 session id 把这个 session 检索 出来使用(如果检索不到,可能会新建一个,根据 getSession()方法的参数),如果客户 端请求不包含 session id,则为此客户端创建一个 session 并且生成一个与此 session 相关 联的 session id,这个 session id 将被在本次响应中返回给客户端保存。
- session的客户端实现方法(session id的保存):
1、使用cookie保存
2、url重写:就是把 session id 直接附加在 URL 路径的后面,也就是像我们经常看到 JSP 网站会有 aaa.jsp?JSESSIONID=*一样的。
3、在页面表单里增加隐藏域
- session被创建的时间:
一个常见的错误是以为 session 在有客户端访问时就被创建,然而事实是直到某 server 端程序(如 Servlet)调用 HttpServletRequest.getSession(true)这样的语句时才会被创建。 - session被删除的时间:
A.程序调用 HttpSession.invalidate()
B.距离上一次收到客户端发送的 session id 时间间隔超过了 session 的最大有效时间
C.服务器进程被停止 - getSession()/getSession(true)、getSession(false)的区别:
getSession()/getSession(true):当 session 存在时返回该 session,否则新建一个 session 并返回该对象。
getSession(false):当 session 存在时返回该 session,否则不会新建 session,返回 null。
5.2 cookie的机制
1、cookie的种类
- .以文件方式存在硬盘空间上的永久性的 cookie。
- 停留在浏览器所占内存中的临时性的 cookie。
2、cookie的有效期
maxAge 决定着 Cookie 的有效期,单位为秒。
- 当maxAge属性为正