会话
用户打开浏览器 点击了很多链接 访问了很多资源 关闭浏览器这个过程可以称之为会话
有状态会话:
保存会话的两种技术
cookie
- 客户端技术(响应,请求)
session
- 服务器技术,利用这个技术可以保存用户的会话信息。我们可以把信息放在session中
常见场景:网站登录之后,下次不用再登录了 第二次访问直接就上去了
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//服务器告诉你,你来的时间。把这个时间封装为一个Cookie,下一次带来就知道你来了
//解决控制台中文乱码
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
//解决网页中文乱码
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
//Cookie 服务端端从客户端获取
Cookie[] cookies = req.getCookies(); //返回一个数组 说明可以存在多个
//判断Cookie是否存在
if (cookies != null) {
//如果存在怎么办
out.println("你上次访问的时间是:");
for (int i = 0; i < cookies.length; i++) {
Cookie cookie = cookies[i];
//获取Cookie的名字
if (cookie.getName().equals("LastLoginTime")) {
//将字符串解析为长整型
long LastLoginTime = Long.parseLong(cookie.getValue());
Date date = new Date(LastLoginTime);
out.println(date.toLocaleString());
}
}
}else {
out.println("这是你第一次访问本站");
}
//服务器给客户端响应一个Cookie
Cookie cookie = new Cookie("LastLoginTime",System.currentTimeMillis()+"");
resp.addCookie(cookie);
}
<servlet>
<servlet-name>cookiedemo1</servlet-name>
<servlet-class>com.deng.servlet.CookieDemo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cookiedemo1</servlet-name>
<url-pattern>/cookiedemo1</url-pattern>
</servlet-mapping>
- 从请求中拿到cookie信息
- 服务器响应给客户端cookie
cookie一般会保存在本地的用户目录下 appdata://获取Cookie
Cookie[] cookies = req.getCookies();
//获得Cookie中的key
cookie.getName()
//获得Cookie的value
cookie.getValue()
//新建一个Cookie
Cookie cookie = new Cookie(key,value);
//设置Cookie的有效期
cookie.setMaxAge(int time);
//响应给客户端
resp.addCookie(cookie);
一个网站的cookie是否存在上限
- 一个cookie只能保存一个信息
- 一个web站点可以给浏览器发送多个cookie 每个站点存放20个cookie
- Cookie大小有限制
- 浏览器的上限大概为300个cookie
删除cookie
- 不设置有限期 关闭浏览器 自动失效
- 设置有效期时间为0
编码解码
//URL编码格式
URLEncoder.encode("String value","utf-8");
//URL解码格式
URLDecoder.decode("String value","utf-8");