cookie与session的作用与区别
cookie与session的出现是为了解决HTTP服务无状态这一问题的。
cookie和session都是为了网页能够识别用户所用到的方式,不同在于存储位置不同,cookie是存储在浏览器中,而session是存储在服务器中。
cookie运行原理
访问某服务器时,服务器在响应请求时会创建一个cookie来对用户进行记录,并且将cookie通过响应传输到浏览器中,等浏览器再次访问服务器时,请求头内会包含cookie信息。
cookie的失效时期
通过这种方式虽然可以有效的解决HTTP无状态的问题,但是这种方式本身也不安全,所以某些浏览器cookie的默认生命周期结束于关闭浏览器的时候,但是在服务器端可以进行设置。
//1.申请cookie
Cookie cookie = new Cookie("u",uname);
Cookie cookie1 = new Cookie("p",pwd);
//接收选择框的值
String ch = req.getParameter("ch");
//2.指定cookie规则
//指定使用范围
cookie.setPath("/Servlet05");//只可以在当前项目中使用 ‘/’可以在整个服务器使用
cookie1.setPath("/Servlet05");
//设定cookie有效时间
if ("yes".equals(ch)){
// 用秒为单位
cookie.setMaxAge(60*60*24*10);
cookie1.setMaxAge(60*60*24*10);
}else {
cookie.setMaxAge(0);
cookie1.setMaxAge(0);
}
//3.把cookie交给浏览器
resp.addCookie(cookie);
resp.addCookie(cookie1);
//重定向
resp.sendRedirect("success.jsp");
session运行原理
访问某服务器时,第一次请求后服务器会根据用户选择创建session来保存用户信息,响应请求时会在请求头内部返回JSESSIONID字段来记录session的id,下次访问时通过请求头内的JSESSIONID,服务器可以直接获取到用户信息。(JSESSSIONID是存储在cookie中的)
session失效时期
session可以手动注销,也可以设置最大失效时间。
//1.注销session对象
req.getSession().invalidate();
超过session 活动的有效时间
Session 最大活动时间是30分钟,我们可以更改这个默认的时间
A、更改TomCat中web.xml中的配置
影响的是:所有项目中的所有session
<session-config>
<session-timeout>30</session-timeout>
</session-config>
B、更改自己项目的web.xml
影响的是:当前项目的所有session
<session-config>
<session-timeout>40</session-timeout>
</session-config>
C、更改当前项目的当前session 失效的时间
session.setMaxInactiveInterval(10);
注:当关闭浏览器后JSESSIONID改变了,并不是session失效了,而是cookie失效了,重新获得的JSESSIONID。
cookie与session的区别
- 存储位置不同,cookie存储在浏览器内,session存储在服务器内。
- 安全性不同,cookie安全性低。
- 存储数据大小不同,单个cookie存储数据不超过3K;而session存储在服务器中可以随意存储数据,但又因此,当session存储数据过多时,服务器会选择性清理。
- 存储数据类型不同,cookie存储的一般是字符串类型数据,而session存储的是对象信息。