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>
测试:
