会话只是指一段指定的时间间隔。

会话跟踪是维护用户状态(数据)的一种方式。它也被称为servlet中的会话管理。

Http协议是一个无状态的,所以我们需要使用会话跟踪技术来维护用户状态。 每次用户请求服务器时,服务器将请求视为新请求。 所以需要保持一个用户的状态来识别特定的用户。

HTTP是无状态的,这意味着每个请求被认为是新的请求。

为什么使用会话跟踪?

  • 因为需要用于识别特定的用户。

会话跟踪技术

会话跟踪中使用的技术有四种:

  • Cookies
  • 隐藏表格域
  • 网址重写
  • HttpSession

Cookie工作原理

默认情况下,每个请求都被视为新的请求。在cookie技术中,servlet响应可以添加cookie。 所以cookie存储在浏览器的缓存中。之后,如果用户发出请求,默认情况下会带上cookie。 因此,我们就可以知道用户旧用户。

非持久性cookie

  • 它仅适用于单个会话。当用户关闭浏览器时都会删除它。

持久性Cookie

  • 它对多个会话有效。当用户关闭浏览器时也不会删除它。只有在用户注销或注销时才被删除。

Cookie类

javax.servlet.http.Cookie类提供了使用Cookie的功能。它为Cookie提供了很多有用的方法

如何创建Cookie?

Cookie ck=new Cookie("user","maxsu jaiswal");//creating cookie object
response.addCookie(ck);//adding cookie in the response

如何删除Cookie?

Cookie ck=new Cookie("user","");//deleting value of cookie
ck.setMaxAge(0);//changing the maximum age to 0 seconds
response.addCookie(ck);//adding cookie in the response

如何获取Cookie?

Cookie ck[]=request.getCookies();
for(int i=0;i<ck.length;i++){
out.print("<br>"+ck[i].getName()+" "+ck[i].getValue());//printing name and value of cookie
}

Cookie.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Cookie In Servlet</title>
</head>
<body>
<div style="text-align: center">
<form action="seevlet1" method="post">
用户名:<input type="text" name="username" value="tanlei"/>
<input type="submit" value="提交"/>
</form>
</div>
</body>
</html>

FirstServlet.java

package com.tanlei.cookie;

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; public class FirstServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html");
PrintWriter out = resp.getWriter(); String name = req.getParameter("username");
String username = new String(name.getBytes("ISO-8859-1"),"utf-8"); out.print("<!DOCTYPE html>\r\n" +
"<html>\r\n" +
"<head>\r\n" +
"<meta charset=\"UTF-8\"><body>");
out.print("欢迎您, " + username); Cookie cookie=new Cookie("uname",username);
resp.addCookie(cookie); out.print("<form action='servlet2' method='post'>");
out.print("<p>Cookies已在浏览器中设置,现在跳转到第二个Servlet中读取Cookies的值。</p>");
out.print("<input type='submit' value='提交到第二个Servlet'>");
out.print("</form>"); out.close();
}catch (Exception e){
System.out.println(e);
}
}
}

SecondServlet.java

package com.tanlei.cookie;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter; public class SecondServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) {
try {
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Cookie ck[] = request.getCookies();
out.print("Hello " + ck[0].getValue());
out.close();
} catch (Exception e) {
System.out.println(e);
}
} }

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.tanlei.cookie.FirstServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/servlet1</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>SecondServlet</servlet-name>
<servlet-class>com.tanlei.cookie.SecondServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>SecondServlet</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
</web-app>

HttpSession会话

最新文章

  1. 3.1、Spring和Struts2的结合使用
  2. Java入门到精通——工具篇之Maven概述
  3. 第二百二十五 how can I 坚持
  4. JDBC标准事物编程模式
  5. 泛泰A850 (高通8064+720p)刷4.4专用中文recovery TWRP2.7.1.3版
  6. c++日历改进版
  7. mysql安装出现的问题
  8. HDU 6092`Rikka with Subset 01背包变形
  9. csrf jsonp
  10. jQuery插件开发的基本形式
  11. Git与GitHub学习笔记(四)合并远程分支
  12. Android 音视频深入 四 录视频MP4(附源码下载)
  13. Prometheus Node_exporter 之 Memory Detail Meminfo /proc/meminfo
  14. JS判断IP的正则表达式
  15. JVM垃圾回收机制总结
  16. 用原生JS写一个网页版的2048小游戏(兼容移动端)
  17. Home Assistant系列美化篇——替换天气 UI
  18. 六:ZooKeeper的java客户端api的使用
  19. wxWidgets之wxGrid控件
  20. 快速排序的JavaScript实现

热门文章

  1. 粗浅看 Tomcat系统架构分析
  2. TensorFlow的安装 (python3.6在有pip的条件下如何安装TensorFlow)
  3. Trees in a Wood UVA - 10214 欧拉函数模板
  4. agc004E Salvage Robots
  5. Browsersync 浏览器自动刷新
  6. 主流浏览器HTML5视频格式差异
  7. 做移动应用使用地图API时需要注意的问题
  8. jeecg流程梳理学习
  9. 数据库设计 ch.7
  10. Linux ifconfig 配置网络接口