1、设置COOKIE
通过 new COOKIE("COOKIE名", "值")来设置,让后通过HttpServletResponse.addCOOKIE发送浏览器添加COOKIE,代码如下:
import org.springframework.stereotype.Controller;2、读取单个COOKIE
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.COOKIE;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.net.http.HttpResponse;
@Controller
public class HelloController {
@RequestMapping("/hello")
@ResponseBody
public String Index(HttpServletResponse response) {
COOKIE COOKIE = new COOKIE("username", "bfw");
//将COOKIE对象加入response响应
response.addCOOKIE(COOKIE);
return "hello";
}
}
Spring框架提供@COOKIEValue注释来获取HTTP COOKIE的值,此注解可直接用在控制器方法参数中。
@GetMapping("/")
public String readCOOKIE(@COOKIEValue(value = "username",defaultValue = "Atta") String username) {
return "Hey! My username is " + username;
}
在上述代码段中,请注意defaultValue = "Atta"。如果没有设置默认值,并且没有找到名称为username的COOKIE,Spring将抛出java.lang.IllegalStateException异常。
3、读取所有COOKIE[]
除了使用@COOKIEValue注解,我们还可以使用HttpServletRequest类作为控制器方法参数来读取所有COOKIE。此类提供了getCOOKIEs()方法,该方法以数组形式返回浏览器发送的所有COOKIE。
@GetMapping("/all-COOKIEs")
public String readAllCOOKIEs(HttpServletRequest request) {
COOKIE[] COOKIEs = request.getCOOKIEs();
if (COOKIEs != null) {
return Arrays.stream(COOKIEs).map(c -> c.getName() + "=" + c.getValue()).collect(Collectors.joining(", "));
}
return "No COOKIEs";
}
4、为COOKIE设置过期时间
如果没有为COOKIE指定过期时间,则其生命周期将持续到Session过期为止。这样的COOKIE称为会话COOKIE。会话COOKIE保持活动状态,直到用户关闭其浏览器或清除其COOKIE。但是您可以覆盖此默认行为,并使用类的setMaxAge()方法设置COOKIE的过期时间。
// 创建一个 COOKIE对象
COOKIE COOKIE = new COOKIE("username", "Jovan");
COOKIE.setMaxAge(7 * 24 * 60 * 60); // 7天过期
//将COOKIE对象加入response响应
response.addCOOKIE(COOKIE);
现在,usernameCOOKIE不会因为Seesion结束到期,而是会在接下来的7天保持有效。传递给setMaxAge()方法的到期时间以秒为单位。到期日期和时间是相对于设置COOKIE的客户端而不是服务器而言的。
5、Https与COOKIE
我们需要了解一个概念:什么的安全的COOKIEs?安全的COOKIE是仅可以通过加密的HTTPS连接发送到服务器的COOKIE。无法通过未加密的HTTP连接将COOKIE发送到服务器。也就是说,如果设置了setSecure(true),该COOKIE将无法在Http连接中传输,只能是Https连接中传输。
// 创建一个 COOKIE对象
COOKIE COOKIE = new COOKIE("username", "Jovan");
COOKIE.setSecure(true); //Https 安全COOKIE
//将COOKIE对象加入response响应
response.addCOOKIE(COOKIE);
6、HttpOnly COOKIE
HttpOnly COOKIE用于防止跨站点脚本(XSS)攻击,也就是说设置了Http Only的COOKIE不能通过JavaScript的Document.COOKIEAPI访问,仅能在服务端由服务器程序访问。
// 创建一个 COOKIE对象
COOKIE COOKIE = new COOKIE("username", "Jovan");
COOKIE.setHttpOnly(true); //不能被js访问的COOKIE
//将COOKIE对象加入response响应
response.addCOOKIE(COOKIE);
7、删除COOKIE
要删除COOKIE,需要将Max-Age设置为0,并且将COOKIE的值设置为null。不要将Max-Age指令值设置为-1负数。否则,浏览器会将其视为会话COOKIE。
// 将COOKIE的值设置为null
COOKIE COOKIE = new COOKIE("username", null);
//将`Max-Age`设置为0
COOKIE.setMaxAge(0);
response.addCOOKIE(COOKIE);
网友回复