标签:throws Servle 抓包 用途 服务器的响应 style name ide except
Cookie是Http协议制定的内容,虽然Http协议是无状态的,但是我们可以通过使用Cookie来保存一些客户端的信息到服务器中,还可以使用Cookie来跟踪用户,典型的Cookie的使用-购物车,服务器可以跟踪用户在什么时间访问了哪些页面,以及访问这些页面的顺序,然后为用户维持一个购物品的列表,在结账时就可以一起付费了。
在Http协议中,与Cookie有关的请求头有:
Cookie:XXX
与Cookie有关的响应头有:
Set-Cookie:XXX
需要注意的是Cookie是服务器发送给客户端的,客户端第一次发出请求时,是没有Cookie:XXX这个请求头的,因为服务器还未给客户端响应这个响应头Set-Cookie:XXX,在客户端第一次接收到服务器的响应时,响应头中就有可能有Set-Cookie:XXX这个响应头,然后客户端再次发出请求时,就会带上这个Cookie了,当然用户有权利不使用Cookie。
在Javaweb中使用Cookie
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String name = req.getParameter("name");
resp.addCookie(new Cookie("name", name));
}
}
在使用HttpServletResponse的addCookie方法往客户端设置Set-Cookie头时,需要方法传递一个Cookie对象,我们使用一个键值对,构造一个Cookie对象,
上面的代码中,我们首先会获取客户端传递的name参数,然后将Cookie键值对中的值,发送到客户端,使用谷歌自带的抓包工具可以发现
public class AServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
IOException {
String name = null;
Cookie[] cookies = request.getCookies();
for (Cookie c : cookies) {
if (c.getName().equals("name")) {
name = c.getValue();
}
}
response.getWriter().print("Hello" + name);
}
}
这段代码会将Cookie中名字是“name”的键对应的值输出到客户端,
Cookie的属性
1 public class HelloServlet extends HttpServlet {
2 @Override
3 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
4 String name = req.getParameter("name");
5 Cookie cookie = new Cookie("name", name);
6 cookie.setMaxAge(60 * 60);
7 cookie.setComment("save name");
8 cookie.setHttpOnly(true);
9 cookie.setSecure(true);
10 resp.addCookie(cookie);
11 }
12 }
1 public class HelloServlet extends HttpServlet {
2 @Override
3 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
4 resp.addCookie(new Cookie("name", URLEncoder.encode("中文", "utf-8")));
5 }
6 }
7 public class AServlet extends HttpServlet {
8 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,
9 IOException {
10 String name = null;
11 Cookie[] cookies = request.getCookies();
12 for (Cookie c : cookies) {
13 if (c.getName().equals("name")) {
14 name = URLDecoder.decode(c.getValue(), "utf-8");
15 }
16 }
17 System.out.println(name); // 中文
18 }
19 }
HelloServlet 向客户端保存Cookie
标签:throws Servle 抓包 用途 服务器的响应 style name ide except
原文地址:https://www.cnblogs.com/yusiming/p/9751873.html