package com.example.demo.Goods;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
@Controller
public class GoodsController {
@RequestMapping("/Login")
public String Login(@RequestParam("phone")String phone, @RequestParam("pass")String pass, HttpServletRequest request, HttpServletResponse response){
boolean flag = false;
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals(phone)) {
System.out.println("有对应的cookie");
System.out.println("cookie的时效: " + cookie.getMaxAge());
System.out.println("cookie的Comment: " + cookie.getComment());
System.out.println("cookie的Domain: " + cookie.getDomain());
System.out.println("cookie的Name: " + cookie.getName());
System.out.println("cookie的Path: " + cookie.getPath());
System.out.println("cookie的Value: " + cookie.getValue());
System.out.println("cookie的Secure: " + cookie.getSecure());
System.out.println("cookie的Version: " + cookie.getVersion());
flag = true;
}
}
} if(flag == false){
LocalDateTime now = LocalDateTime.now();
System.out.println("创建cookie了");
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd_HH:mm:ss");
String format = LocalDateTime.now().format(dateTimeFormatter);
Cookie cookie = new Cookie(phone, pass + "创建的时间是:_" + format);
cookie.setMaxAge(10 * 60);
cookie.setPath("/");
response.addCookie(cookie);
System.out.println("------------------------------------------");
System.out.println("新建的cookie的时效: " + cookie.getMaxAge());
System.out.println("------------------------------------------");
}
return "Success";
}
}
package com.example.demo.Goods;
import org.springframework.boot.web.servlet.server.Session;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.xml.crypto.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;
@Controller
public class GoodsController {
@RequestMapping("/Login")
public String Login(@RequestParam("phone")String phone, @RequestParam("pass")String pass, HttpServletRequest request, HttpServletResponse response){
HttpSession session;
if(request.getSession().getAttribute(phone) != null){
LocalDateTime a = LocalDateTime.now();
session = request.getSession();
System.out.println("用户的session信息是: " + session.getAttribute(phone));
System.out.println("session的ID是" + session.getId());
System.out.println("session的CreationTime是" + a.plusNanos(session.getCreationTime()));
System.out.println("session的LastAccessedTime是" + a.plusNanos(session.getLastAccessedTime()));
System.out.println("session的ServletContext是" + session.getServletContext());
System.out.println("session的MaxInactiveInterval是" + session.getMaxInactiveInterval()/60 + "分钟");
}else {
request.getSession().setAttribute(phone, pass);
}
return "Success";
}
}
结果:
第二次登陆:且未到session的过期时间
用户的session信息是: 122
session的ID是0BB6388BF0F1D41C7A69B7C3C9D3F4
session的CreationTime是2019-12-11T21:11:37.9572157
session的LastAccessedTime是2019-12-11T21:11:37.957257873
session的ServletContext是org.apache.catalina.core.ApplicationContextFacade@4c90d147
session的MaxInactiveInterval是30分钟
session没有任何的路径访问问题。
isNew():是否是新的Session,一般在第一次访问的时候出现
getid():拿到session,获取ID
getCreationTime():当前session创建的时间
getLastAccessedTime():最近的一次访问这个session的时间。
getRrquestedSessionid: 跟随上个网页cookies或者URL传过来的session
isRequestedSessionIdFromCookie():是否通过Cookies传过来的
isRequestedSessionIdFromURL():是否通过重写URL传过来的
isRequestedSessionIdValid():是不是有效的sessionID
session.setMaxInactiveInterval(600);
removeAttribute()就是从session删除指定名称的绑定对象,也就是说调用此方法后再调用getAttribute(Stringname)时,不能获取指定名称的绑定对象,但是session还存在。invalidate就是销毁此session对象,session对象中绑定的那些对象值也都不存在了.
session.invalidate()是销毁跟用户关联session,例如有的用户强制关闭浏览器,而跟踪用户的信息的session还存在,可是用户已经离开了。虽然session 生命周期浏览默认时间30分,但是在30分钟内别的用户还可以访问到前一个用户的页面,需销毁用户的session。session.removeAttribute()移除session中的某项属性。
在用户登陆中,用户退出时执行的是 request.getSession().removeAttribute(“userSession”);
session被销毁了
// 注销用户,使session失效。
验证验证码时,获取到session中的验证码后,用的是removeAttribute
是清空当前session中指定的属性,下个request中的sessionID是不变的
也就是说,session还是原来的session
session.setMaxInactiveInterval(-1);
在tomcat6中调用
request.getSession().setMaxInactiveInterval(0);
这个session会立即过期。
而在tomcat8中,同样的调用,会导致这个session永不过期,这也跟Oracle在HttpSession文档中描述一致:
An interval value of zero or less indicates that the session should never timeout.
参考:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- niushuan.com 版权所有 赣ICP备2024042780号-2
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务