1、会话
会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话;
有状态会话: 一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话;
一个网站,怎么证明你来过?
客户端
服务端
1.服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了; cookie
2.服务器登记你来过了,下次你来的时候我来匹配你; seesion
2、保存会话的两种技术
cookie
●客户端技术 (响应,请求)
session
●服务器技术,利用这个技术,可以保存用户的会话信息?我们可以把信息或者数据放在Session中!
常见常见:网站登录之后,你下次不用再登录了,第二次访问直接就上去了!
3、Cookie
1.从请求中拿到cookie信息
2.服务器响应给客户端cookie
Cookie[] cookies = req.getCookies(); //获得cookie cookie.getName(); //获得cookie中的key cookie.getValue(); //获得cookie中的value new Cookie("lastLoginTime", System.currentTimeMillis() + ""); //新建一个cookie cookie.setMaxAge(24*60*60); //设置cookie有效期 resp.addCookie(cookie); //响应客户端一个cookie
一个网站cookie是否存在上限!聊聊细节问题
●一个Cookie只能保存一 个信息;
●一个web站点可以给浏览器发送多个cookie, 最多存放20个cookie;
●Cookie大小有限制4kb;
●300个cookie浏览器上限
删除Cookie;
●不设置有效期,关闭浏览器,自动失效;
●设置有效期时间为0 ;
编码解码:
URLEncoder.encode("李庆林","utf-8"); URLDecoder.decode(cookie. getValue(),"UTF-8");
代码:
pom依赖:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency> <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency>
CookieDemo001:
package com.allen.servlet; import javax.servlet.ServletException; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; public class CookieDemo001 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"); PrintWriter out = resp.getWriter(); //Cookie,服务器从客户端获取 Cookie[] cookies = req.getCookies(); //判断Cookie是否存在 if(cookies != null){ //如果存在怎么办 out.write("你上一次访问的时间是:"); for(int i = 0; i < cookies.length; i++){ Cookie cookie = cookies[i]; //获取cookie的名字 if(cookie.getName().equals("lastLoginTime")){ //获取cookie中的值 long lastLoginTime = Long.parseLong(cookie.getValue()); Date date = new Date(lastLoginTime); out.write(date.toLocaleString()); } } }else{ out.write("这是您第一次访问本站!"); } //服务器给客户端响应一个cookie Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + ""); resp.addCookie(cookie); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req, resp); } }
web.xml
<servlet> <servlet-name>CookieDemo001</servlet-name> <servlet-class>com.allen.servlet.CookieDemo001</servlet-class> </servlet> <servlet-mapping> <servlet-name>CookieDemo001</servlet-name> <url-pattern>/c1</url-pattern> </servlet-mapping>
测试: