1.session和cookie定义
1.1什么是Cookie
Cookie在浏览器端存储数据,并以此跟踪和识别用户的机制,浏览器通过HTTP协议和服务器端进行交互。因此,Cookie是由浏览器实现和管理的。
Cookie通常用来存储一些不是很敏感的信息,或者进行登录控制等。
每个域名下允许的Cookie是有限制的。Cookie不是越多越好,它会增加宽带,增加流量消耗;不要把Cookie当作客户端的存储器来用。一个域名的每个Cookie限制以4千字节(KB)键值对的形式存储。
Cookie中存放的信息包含本身属性和用户自定义属性.
- 用户自定义属性:一个cookie只能包含一个自定义键/值对(key=value)。
- 本身属性:Path,Domain,Max-Age ,Comment,Max-Age,Secure,Version。
Path: 网站上可以访问cookie的页面的路径;可以将Path设置为/,使cookie可以被网站下所有页面访问。
Domain:可访问该cookie的域名;对于多二级域名的cookie,可以是设置为*.example.com,同时Path设置为/。
Max-Age:cookie的有效时间,用秒计数。失效后,cookie的信息不会从客户端附加在HTTP消息头中发送到服务端。
Comment :cookie的描述。
Secure :cookie的安全性。Secure缺省为false,在HTTP状态下传递cookie。当为true时,在HTTP状态下传递cookie,HTTP时不传递cookie。
Version:cookie的版
1.2什么是session
Session是服务器端使用的一种记录客户端状态的机制,Session对象存储特定用户会话所需的属性及配置信息。
客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式,如(sessionId)记录在服务器上。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。
2.基于sprig登录&登出操作
public class TestCtrl {
private static final String SESSION_KEY = "sessionId";
@Autowired
protected HttpServletRequest request;
@Autowired
protected HttpServletResponse response;
// 用户登录时,服务端保存用户信息在session中,获取SessionId
String createNewSessionId(String userName) {
HttpSession session = request.getSession();
session.setAttribute(SESSION_KEY, userName);
session.setMaxInactiveInterval(36000); // Session保存失效时长
return session.getId();
}
// 用户登录时,客户端创建cookie保存失效时长
void createNewCookie(String sessionId) {
Cookie cookie = new Cookie(SESSION_KEY, sessionId);
cookie.setMaxAge(3600);
cookie.setPath("/");
response.addCookie(cookie);
}
// 登出时,删除sessionId
void removeSessionId() {
HttpSession session = request.getSession();
session.removeAttribute(SESSION_KEY);
session.invalidate();
}
// 清空Cookie操作
void cleanCookie() {
Cookie cookie = new Cookie(SESSION_KEY, null);
cookie.setMaxAge(0);
cookie.setPath("/");// 根据你创建cookie的路径进行填写
response.addCookie(cookie);
}
}
3.如何从cookie 获取sessionId
public class TestCtrl {
private static final String SESSION_KEY = "sessionId";
@Autowired
protected HttpServletRequest request;
// 1.获取sessionId
String getSessionId() {
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
if (SESSION_KEY.equals(cookie.getName())) {
return cookie.getValue();
}
}
}
return null;
}
}