cookie和session
Cookie
概述
客户端技术(请求,响应),只能存String
一般保存在本地的用户目录下appdata
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie,最多存放20个
- cookie大小限制4kb
- 300个cookie浏览器上限
cookie操作
request.getCookies();//获得cookie
cookie.getName();//获得cookie名字
cookie.getValue()//获得cookie值
new Cookie("lastLogTime", System.currentTimeMillis() + "");//新建cookie
cookie.setMaxAge(24 * 60 * 60);//设置cookie有效期
response.addCookie(cookie)//服务端给客户端响应cookie
删除
- 不设置有效期,关闭浏览器就失效
- 设置有效期0
编码解码
URLEncoder.encode("你好","utf-8");//编码
URLDecoder.decode("你好","utf-8");//解码
代码
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setHeader("content-type", "text/html;charset=UTF-8");
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
//cookie,服务端从客户端获取
Cookie[] cookies = request.getCookies();
if (cookies != null) {
out.write("上次访问时间:");
for (Cookie cookie : cookies) {
if ("lastLogTime".equals(cookie.getName())) {
long l = Long.parseLong(cookie.getValue());
Date date = new Date(l);
out.write(date.toLocaleString());
}
}
} else {
out.write("第一次访问");
}
//添加cookie,服务端响应给客户端
Cookie cookie = new Cookie("lastLogTime", System.currentTimeMillis() + "");
//cookie有效期
cookie.setMaxAge(24 * 60 * 60);
response.addCookie(cookie);
}
Session
服务端技术,可以存对象
访问时,session会自动存在,服务端会生产一个sessionId的cookie《nam为JSESSIONID》,并返回给客户端,以后每次请求客户端都会带着这个cookie(钥匙),而用户信息可以保存在服务端session中
注销session:
-
手动:
//手动注销session,再访问时又有新的session
session.invalidate(); -
设置有效器
-
web.xml配置
<session-config> <session-timeout>30</session-timeout> </session-config>
-
代码配置:session.setMaxInactiveInterval(6);
@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //乱码解决 req.setCharacterEncoding("utf-8"); resp.setCharacterEncoding("utf-8"); resp.setContentType("text/html;charset=UTF-8"); //获取session HttpSession session = req.getSession(); //设置session有效期 session.setMaxInactiveInterval(6); //存 session.setAttribute("name", "张三"); //获取session id String sessionId = session.getId(); //判读是否为新 if (session.isNew()) { resp.getWriter().write("session创建成功,id为:" + sessionId); } else { resp.getWriter().write("session已在服务器中存在,id为:" + sessionId); } }
-
区别
- cookie是把用户数据写给客户端浏览器,保存在浏览器
- session把用户数据写到用户独占的session中,保存在服务器
- session 的运行依赖 session id,而 session id 是存在 cookie 中的
- cookie大小有长度限制,4kb左右
- cookie不太安全
session使用场景
- 保存登陆用户信息
- 购物车信息
- 整个网站中经常使用的数据
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY