Session
在之前的博客中我们已经看到了。Cookie有很多问题,那么我们又有一种解决方法,它叫做session,Session是一种解决方安案,但是它不是cookie的代替方案
Session又是怎么来保持状态连接的?
Session是把数据保存到服务器端
Session底层依然使用Cookie
(1) 创建session
HttpSession session = req.getSession();
如果有session,那么直接拿到session
如果没有session,创建一个session,再拿到这个session
HttpSession session = req.getSession(boolean value);
Value:true -> 如果有直接拿,如果没有创建一个
Value:false ->如果有直接拿,如果没有返回null
(2) 怎么能在session里面设置值
语法:-session.setAttribute(String key, Object obj);
session.setAttribute("name", name);
session.setAttribute("user", user);
(3) 怎么从session里面取值
语法:req.getSession().getAttribute(String key);
req.getSession().getAttribute("name")
(4) 删除session中的值
根据一个key删除session中的一条记录
req.getSession().removeAttribute("name");
销毁整个Session对象
req.getSession().invalidate();
(5) 在session中存取一个对象
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) {
HttpSession session = req.getSession();
//在session中存储一个对象
User user = new User();//自定义的类的实例
session.setAttribute("user",user)
}
将存入的对象取出(返回的是Object类型,需要转换会User类型)
User user = (User)req.getSession().getAttribute("user");
(6) session的生命周期(会话的生命周期)
从我们创建session开始,到关闭浏览器死亡
Session有超时时间,默认为30分钟
当我们没有操作开始计算
既然有默认的,那么我们就可以自定义一个时间(秒)
session.setMaxInactiveInterval(Integer interval);
也可以直接在web.xml中设制session的过期时间(单位分钟):
<session-config>
<session-timeout>10</session-timeout>
</session-config>
如果设置为负数 , 关闭浏览器
(7) 禁用cookie后,怎么办(了解)
重写URL
http://localhost/session/single;jsessionid=372EC71FF0939E7C74B533B071714C5E
resp.encodeURL(“路径”) →资源重写解决这个问题
上传的功能中,上传的时候很有可能我们会使用flash组件。
Flash组件有一个问题:session丢失,这个时候就需要将jsessionid手动进行传递提交
注意:①很多网站/系统登陆就是使用session;
②Session有一个问题:所以内容都保存服务器内存里面,服务器内存有很大负担,慎用
(8) Session 和 Cookie区别
①Session把信息存在服务器,Cookie存在浏览器里面,Session底层通过cookie存jsessionid
②Session安全性比Cookie要一些
③Cookie存储值有限制
④Cookie不能存储对象 Session可以存取对象
⑤Cookie操作中文不方便
⑥Session服务器内存,注意不存入太多值,存储登录用户信息