Javaweb
Cookie、Session
1、会话
有状态会话:一个同学来过教室,下次再来教室,我们会知道他曾经来过。
会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源的过程。
一个网站怎么证明你来过
客户端 服务端
1、服务端给客户端一个信件,客户端下一次访问带上信件就可以了。cookie
2、服务器登记你来过,下次你来的时候我来匹配你。 session
2、保存会话的两种技术
session
客户端技术(响应,请求)
cookie
服务器技术,利用这个技术,可以把信息或者数据放在session中。
常见:网站登陆一次之后,第二次就不用登陆了。
3、Cookie
1、由服务器创建一个cookie,并设置数据和属性,再由服务器发送给客户端,客户端在本地保存该cookie
//服务器给客户端设置cookie
Cookie time_cookie = new Cookie("lastTime",System.currentTimeMillis()+"");
time_cookie.setMaxAge(24*60*60);//设置cookie的存活时间,0代表删除cookie,负数代表不会保存该cookie,正数以秒为单位
resp.addCookie(time_cookie);
2、下次访问时带上该cookie,服务器就能知道你先前来过,并可以通过cookie获取数据
//服务器获取客户端的cookie
Cookie[] cookies = req.getCookies();
PrintWriter writer = resp.getWriter();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("lastTime")) {
writer.print("上次登陆时间为: ");
writer.print(new SimpleDateFormat().format(new Date(Long.valueOf(cookie.getValue()))));
4、Session(重点)
什么是session:
服务器会给每一个用户创建一个session对象
一个session独占一个浏览器,只要浏览器没有被关闭,这个session就存在
用户登录之后整个网站都可以访问。
使用session
//获取session
HttpSession session = req.getSession();
//获取sessionId
String id = session.getId();
//给session设置数据
session.setAttribute("name",new Person("庞杰",22));
//判断session是不是新创建的
if(session.isNew()){
resp.getWriter().write("session创建完成,sessionId为:"+id);
}else{
resp.getWriter().write("session已经存在,sessionId为:"+id);
}
获取数据
//获取数据
Object name = session.getAttribute("name");
String s = name.toString();
resp.getWriter().print(s);
注销session
HttpSession session = req.getSession();
//手动注销
session.invalidate();
**会话自动过期 ** 配置web.xml文件
<session-config>
<session-timeout>60</session-timeout>
</session-config>
5、cookie和session的相同点和不同点
1、相同点:cookie和session都是为了解决http协议无状态的特征。
2、区别:
- cookie数据是存放在客户端本地的,session数据是存放在服务器的,但是服务端的session的实现对客户端的cookie有依赖关系的;
- cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session;
- session会在一段时间内存放在服务器,如果session过多,会导致服务器压力过大,性能降低。如果考虑服务器性能方面应该使用cookie
- cookie的大小是有限制的
- 一个用户在一个站点上可以有多个cookie,但是只有一个session