话不多说,直接开搞
/**
* 回顾Cookies和session用法
* 从HttpServlet中获取和响应
* @param httpCookie 在参数中构建cookie
* @param httpServletResponse
* @param httpServletRequest
*/
public void ceshiCookies(HttpCookie httpCookie, HttpServletResponse httpServletResponse, HttpServletRequest httpServletRequest, HttpSession httpSession){
// 从请求中获取cookies
Cookie[] cookies = httpServletRequest.getCookies();
// 遍历前台获取的Cookies
for (Cookie cookie:cookies
) {
if(cookie.getName().equals("姓名")){
// 修改cookie
cookie.setValue("修改");
// 将修改后的cookie响应回前台
httpServletResponse.addCookie(cookie);
// 销毁cookie
cookie.setMaxAge(0);
}
}
// =====================================================================================
// 由参数构建,不建议使用
httpCookie.setValue("");
httpCookie.getValue();
// =====================================================================================
// 获取session的id
String JSESSIONID = httpSession.getId();
// 后端自定义cookies
// key 和 value 都只能是String类型的,注意后端sessionId响应给前端的key就是JSESSIONID
Cookie cookie = new Cookie("JSESSIONID",JSESSIONID);
// 通过session的上下文对象根据sessionId获取session,但是由于java说安全性问题,所以不推荐使用。
// 建议使用session监听器配合一个静态的hashMap即可实现
HttpSession session = httpSession.getSessionContext().getSession(JSESSIONID);
// 销毁session
session.invalidate();
// 设置存活时间,如果不设置底层默认的时间等于-1(即为浏览器关闭就被销毁)
cookie.setMaxAge(60);
// 设置存储路径
cookie.setPath("/");
// 后端设置Cookie前端跨域获取丢失问题(基于springboot实现)
// 1.跨域问题说明:后端域名为A.abc.com,前端域名为B.abc.com。
// 2.后端设置一个cookie发送给前台,domain应该是setDomain(“abc.com”),而不是setDomain(“B.abc.com”)
// 3.另外,还要实现WebMvcConfigurerr配置加入Cors的跨域,在尾部会附上
cookie.setDomain("abc.com");
// 将自己后端定义的cookies响应给前端
httpServletResponse.addCookie(cookie);
}
// WebMvcConfigurerr配置加入Cors的跨域
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "OPTIONS", "PUT")
.allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin", "Access-Control-Request-Method",
"Access-Control-Request-Headers")
.exposedHeaders("Access-Control-Allow-Origin", "Access-Control-Allow-Credentials")
.allowCredentials(true).maxAge(3600);
}
}
Q.E.D.