标题一、计算机网络理解cookie和session
- cookie
• 它是服务器发送到客户端浏览器中,一般携带着用户信息,浏览器可以储存它,并且把它与下一个请求一同发送到服务器,它可以用来判断两个请求是否来自同一个浏览器,它记录无状态的http协议有状态的信息。
• 每个web站点的cookie不能超过20个,每个不能超过4KB。安全性无法的到保障。 - session
• 客户端请求服务器,服务器会开辟一段空间,存储session,存储结构为ConcurrentHashMap。服务器可以利用session存储客户端在同一个会话期间的一些操作记录。
• 客户端第一个请求服务器会生成一个session,并生成唯一的sessionID,session具有声明周期,一般为半个小时或者浏览器关闭。
标题二、Servlet实列
标题session
- session服务端的一个集合,可以存储任何东西,可以识别客户,每一个客户都有特定的id。
- 第一次访问servlet时,服务器会为每一个客户创建一个session对象,并存入session集合,用session标识。
- 一般把sessionID放入cookie中,随着客户端请求上传到服务器,如果服务器session集合中有这个sessionID,则客户端就可以直接获取这个这个session对象。
- session是有保质期的,
1、如果服务器的session一直没有被使用,服务器会查询session最后访问时间,如果这个时间超过了过期时间,服务器会销毁该session(默认时间为30分钟)。
2、在关闭浏览器时,服务器也会销毁session,重新访问创建新的session对象。
public class SessionServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession httpSession = request.getSession();
httpSession.setMaxInactiveInterval(6);
httpSession.setAttribute("username","zhangsan");
String id = httpSession.getId();
response.setContentType("text/html;charset=utf-8");
PrintWriter writer = response.getWriter();
System.out.println(id);
writer.println("<h1>这就是你请求的id:"+id+"</h1>");
}
}
<servlet>
<servlet-name>SessionServlet</servlet-name>
<servlet-class>com.tdu.servlet.SessionServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SessionServlet</servlet-name>
<url-pattern>/session</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>10</session-timeout>
</session-config>
标题cookie
- cookie是有web服务器生成,向浏览器发送的一小段ASCII文本,浏览器收到后,会保存在某个目录下的文本文件中。
- 单个cookie最大不能超过4K
- 一个站点最多只能读取20个cookie
- 一个站点只能读取自己写的cookie
public class CookieServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie cookie = new Cookie("lisi","person");
Cookie cookie1 = new Cookie("xiaobao","camera");
cookie.setMaxAge(340);
response.addCookie(cookie);
response.addCookie(cookie1);
}
}
public class ReadCookieServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
for (Cookie cookie:cookies) {
String name = cookie.getName();
String value = cookie.getValue();
System.out.println(name+" , "+value);
}
}
}
CookieServlet com.tdu.servlet.CookieServlet ReadCookieServlet com.tdu.servlet.ReadCookieServlet CookieServlet /cookie ReadCookieServlet /readCookie