一、什么是session
session类似于客户端在服务器端的账户。使用Map存放
一个会话锁定一个用户(一般情况下是一个客户端,即一个浏览器独占一个session对象),即使使用浏览器访问其他程序资源,也可以共享这个session
(如何确定是同一个用户?创建session时把sessionID以cookie的形式传给客户端,客户端访问时再把此sessionID传过去进行校验
JSESSIONID
)
二、session和cookie的区别
cookie 把用户的数据保存到浏览器端,session 把用户的数据保存到服务器端
cookie保存在浏览器不安全(cookie欺骗),但可以减轻服务器压力
session保存在服务器端更安全,但增大了服务器压力
浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB
一般把登陆密码等重要信息放session 其它相对不太重要的信息放cookie
补更:
Cookie是浏览器实现的一种数据存储功能
session 字面意思就是会话,会话就要知道你在和谁说话,session也是类似的道理,服务器要知道当前发请求给自己的是谁
三、session的操作
request.getSession()方法得到session 在这个方法第一次调用时才真正创建session(可以通过isNew()方法判断是否为新的)
默认session的存活时间为30分钟,可以在web.xml中配置过期时间
<session-config> <session-timeout>15</session-timeout> </session-config> 程序中使用session.invalidate()手动设置过期
cookie被禁用时的解决方案(cookie被禁用后JSESSIONID无处存放):
解决方案:URL重写
response. encodeRedirectURL(String url)
用于对sendRedirect方法后的url地址进行重写。
response. encodeURL(String url)
用于对表单action和超链接的url地址进行重写
这两个都是比较智能的方法,会在合适的时机进行重写