Session和Cookie的区别?
首先,http是无状态的协议,对于事物处理没有记忆能力。然后每次客户端和服务器会话完成时,服务端不会存储任何会话信息,每个请求都是独立的。所以,服务器与浏览器为了进行会话追踪,就必须主动地去维护这个状态,这个状态用于告知服务器端前后两个请求是否来自同一个人,而这个状态需要通过Session或者Cookie来实现。
Session
理论介绍
- 字面意思就是会话。
- 是JSP内置对象,与浏览器一一对应,允许用户存储和提取会话状态的信息。
- 浏览器关闭,本次会话结束。
- 有一个缺陷,服务器一旦负载均衡,那么下一个操作请求到了另一台服务器上时,Session会丢失。
session对象用来存储有关用户会话的方法
返回类型 | 方法 | 说明 |
---|---|---|
void | setAttribute(String key,Object value) | 以key/value的形式保存对象值 |
Object | setAttribute(String key,Object value) | 通过key获取对象值 |
void | setMaxInactiveInterval(时间/秒) | 设置session的有效非活动时间,以秒为单位 |
int | getMaxInactiveInterval() | 获取session的有效非活动时间,以秒为单位 |
String | setAttribute(String key,Object value) | 以key/value的形式保存对象值 |
void | setAttribute(String key,Object value) | 以key/value的形式保存对象值 |
Cookie
理论介绍
- 指浏览器里面存储的一种数据,仅仅是浏览器实现数据的存储功能。
- 可以由服务器生成发送给浏览器,而浏览器将Cookie以key-value形式保存起来,下一次请求同一服务时,会把Cookie发送给服务器。
- 由于Cookie式存储在客户端上,因此浏览器给它加入了一些限制,以确保Cookie不会占用太多磁盘同时不被恶意使用,所以每个Cookie的数量是有限的。
- 作用:对特定对象的追踪、统计网页浏览次数、简化登录、安全性能、容易信息泄露
语法
- 导入包
import="javax.servlet.http.Cookie"
- 创建Cookie
Cookie newCookie=new Cookie("parameter", "value");
parameter:用于代表cookie的名称(key)
value:用于表示当前key名称所对应的值
- 写入Cookie
response.addCookie(newCookie)
设置Cookie属性的常用方法
返回类型 | 方法 | 说明 |
---|---|---|
void | setMaxAge(int expiry) | 设置Cookie的有效期,以秒为单位 |
void | setValue(String value) | 通过key获取对象值 |
String | getName() | 获取Cookie的名称 |
String | getValue() | 获取Cookie的值 |
String | getMaxAge() | 获取Cookie的有效时间,以秒为单位 |
举个栗子:用cookie做登录状态验证
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 用cookie做登录状态验证 -->
<%
boolean flag = false;
// 1.获取所有的cookie
Cookie[] cks = request.getCookies();
// 2.遍历 cks
if(null != cks){
for(Cookie ck : cks){// ck表示 cks里面的每个对象
if(null != ck){
// 3.获取cookie对象的key
String cname = ck.getName();
// 4.找到保存用户名的 cookie对象
if("uname".equals(cname)){
// 已经登录
flag = true;
break;
}
}
}
}
if(flag == false){// 没有登录
out.print("<script>alert('请先登录!');location.href='login.jsp'</script>");
}
%>
区别
1. 安全性
Session 比 Cookie 安全,Session 是存储在服务端的,Cookie 是存储在客户端的。因此,Cookie 通常用于保存不重要的用户信息,重要信息用Session保存。
2. 存取值的类型不同
Session保存的是对象,Cookie 保存的是字符串。
3. 有效期不同
Session 一般失效时间短,客户端关闭或者Session 超时都会失效。Cookie 可以长期保存在客户端。
4. 存储大小不同
单个Cookie 保存的数据不能超过4k,Session 可存储数据高于Cookie ,但当访问量过多,会占用过多的服务器资源。