cookie,session的Java实现
一、cookie理解
1.特点
Cookie技术:会话数据保存在浏览器客户端。
2.Cookie技术核心,Cookie类:用于存储会话数据
2.1.构造Cookie对象
new Cookie(java.lang.String name, java.lang.String value)
2.2.设置cookie
void setPath(java.lang.String uri) :设置cookie的有效访问路径
void setMaxAge(int expiry) : 设置cookie的有效时间
void setValue(java.lang.String newValue) :设置cookie的值
2.3.发送cookie到浏览器端保存
void response.addCookie(Cookie cookie) : 发送cookie
2.4.服务器接收cookie
Cookie[] request.getCookies() : 接收cookie
3.Cookie原理(cookie不能跨浏览器查询)
3.1.服务器创建cookie对象,把会话数据存储到cookie对象中。
new Cookie("name","value");
3.2. 服务器发送cookie信息到浏览器
response.addCookie(cookie);
3.3.浏览器得到服务器发送的cookie,然后保存在浏览器端。
3.4.浏览器在下次访问服务器时,会带着cookie信息
3.5.服务器接收到浏览器带来的cookie信息
request.getCookies();
二、代码例子
1.项目结构
2.添加cookie代码
/**
* Created by ChenMingXu on 2019/5/28.
*/
//添加cookie
@WebServlet("/AddCookieServlet")
public class AddCookieServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie cookie = new Cookie("xingming", "chenmingxu");
//为什么这么写,因为在服务器端写好,返回客户端
resp.addCookie(cookie);
System.out.println("添加cookie");
}
}
3.测试结果
4.获取cookie的代码
/**
* Created by ChenMingXu on 2019/5/28.
*/
@WebServlet("/GetCookieServlet")
public class GetCookieServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Cookie[] cookies = req.getCookies();
for (Cookie cookie:cookies){
System.out.println(cookie.getName()+"....."+cookie.getValue());
}
}
}
5.测试获取cookie的结果
6.后台打印结果
三、session理解
1.session技术核心,HttpSession类:用于保存会话数据
1.1.创建或得到session对象
HttpSession getSession()
HttpSession getSession(boolean create)
1.2.设置session对象
void setMaxInactiveInterval(int interval) : 设置session的有效时间
void invalidate() : 销毁session对象
java.lang.String getId() : 得到session编号
1.3.保存会话数据到session对象
void setAttribute(java.lang.String name, java.lang.Object value) : 保存数据
java.lang.Object getAttribute(java.lang.String name) : 获取数据
void removeAttribute(java.lang.String name) : 清除数据
2.session原理
2.1.原理图解
3.添加session代码
/**
* Created by ChenMingXu on 2019/5/28.
*/
@WebServlet("/AddSessionServlet")
public class AddSessionServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 默认不传为true,没有sessionid 我会创建session 否则
HttpSession httpSession = req.getSession(true);
httpSession.setAttribute("userName", "chenmingxu");
System.out.println("添加session成功。。。。。");
}
}
4.测试添加session的结果
5.获取session代码
/**
* Created by ChenMingXu on 2019/5/28.
*/
@WebServlet("/GetSessionServlet")
public class GetSessionServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession(false);
String userName = (String)session.getAttribute("userName");
System.out.println("userName"+userName);
}
}
6.测试获取session的结果
7.后台打印结果
四、总结
1.cookie是保存在客户端的,session是保存在服务器端的,但是sessionid是保存在客户端的,底层调用还是cookie把sessionid返回到客户端的。
2.cookie是保存在客户端的,session是保存在服务器端的,如果session重启的时候,数据就会丢失,这时候你该怎么办,放进redis中。
五、结束
Always keep the faith!!!