会话:打开浏览器,进行许多操作,访问了多个web资源,关闭浏览器,这个过程就是一次会话
服务端给客户端一个信件,客户端下次访问服务端时带上信件即可—Cookie服务端登记客户端来过,下次客户端来的时候进行匹配–SessionCookie
客户端技术(响应、请求)Session
服务端技术,可以保存会话信息,保在Session中cookie :一般会保存在本地的用户目录下appdata
一个网站cookie是否存在上限
一个cookie只能保存一个信息一个web站点可以给浏览器发送多个cookie,最多保存20个cookieCookie大小有限制4kb300个cookie浏览器上限删除cookie
不设置有效期,关闭浏览器,自动失效设置有效期为0什么是Session:
服务器会给每个用户(浏览器)创建一个Session对象;一个Session独占一个浏览器,只要浏览器没有关闭,这个Session就存在用户登录之后,整个网站都可以访问—》保存用户信息Session和cookie的区别:
Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)Session把用户的数据写到用户独占的Session中,服务端保存(保存重要的信息,减少服务器端资源的浪费)Session对象由服务创建使用场景:
保存一个登录用户的信息购物车信息在整个网站中经常使用的数据,我们将它保存在Session中使用Session:
import javax.servlet.ServletException; import javax.servlet.http.*; import java.io.IOException; public class SessionDemo01 extends HttpServlet { @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.setAttribute("name","张金辉"); //获取Session的ID String id = session.getId(); //判断session是不是新创建的 if (session.isNew()){ resp.getWriter().write("session创建成功,ID:"+id); }else { resp.getWriter().write("session已经在服务器中存在了,ID:"+id); } //Session创建的时候做了什么 // Cookie cookie = new Cookie("JSESSIONID",id); // resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doGet(req, resp); } } //获取Session HttpSession session = req.getSession(); //收到注销Session session.invalidate();会话自动过期:web.xml配置
<!--设置Session默认的失效时间--> <session-config> <!--15分钟后Session自动失效,以分组为单位--> <session-timeout>15</session-timeout> </session-config>