English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

java에서 request.getSession(true, false, null)의 차이점

java에서 request.getSession(true/false/null)의 차이점

첫 번째, 요구 사유

현실에서 자주 만나는 다음과 같은 경우가 있습니다.3중에서 사용법:

HttpSession session = request.getSession();

HttpSession session = request.getSession(true);

HttpSession session = request.getSession(false);

두 번째, 차이점

1.      Servlet 공식 문서에 따르면:

public HttpSession getSession(boolean create)
현재 요청과 연결된 currentHttpSession을 반환하거나, 현재 세션이 없으며 create가 true인 경우 새 세션이 반환됩니다.
create가 false이고 요청에 유효한 HttpSession이 없으면, 이 메서드는 null을 반환합니다.
세션이 올바르게 유지되도록 보장하기 위해, 이 메서드를 응답이 커밋되기 전에 호출해야 합니다. 컨테이너가 쿠키를 사용하여 세션 일관성을 유지하고 응답이 커밋될 때 새로운 세션을 생성하려고 요청된다면, IllegalStateException이 발생합니다.
Parameters: true -to create a new session for this request if necessary; false to return null if there's no current session
Returns: 이 요청과 관련된 HttpSession 또는 create가 false이고 요청에 유효한 세션이 없으면 null

2.      이를 통해 번역된 의미는 다음과 같습니다:

getSession(boolean create)는 현재 request에 대한 HttpSession을 반환하며, 현재 request에 대한 HttpSession이 null이면 create가 true이면 새로운 세션을 생성하고, 그렇지 않으면 null을 반환합니다;

간단히 말해서:

HttpServletRequest.getSession(true)는 HttpServletRequest.getSession()와 동일합니다; 
HttpServletRequest.getSession(false)는 현재 세션이 없으면 null을 반환하는 것과 동일합니다; 

3.      사용

세션에 로그인 정보를 저장하거나 꺼내는 경우 일반적으로 다음과 같이 권장됩니다: HttpSession session = request.getSession();

当从Session中获取登录信息时,一般建议:HttpSession session =request.getSession(false);

4.      更简洁的方式

如果你的项目中使用到了Spring,对session的操作就方便多了。如果需要在Session中取值,可以用WebUtils工具(org.springframework.web.util.WebUtils)的WebUtils.getSessionAttribute(HttpServletRequestrequest, String name);方法,看看源码:

public static Object getSessionAttribute(HttpServletRequest request, String name){ 
  Assert.notNull(request, "Request must not be null"); 
  HttpSession session = request.getSession(false); 
  return (session != null63; session.getAttribute(name) : null); 
}

주의: Assert는 Spring 패키지의 하나의 도구로, 일부 검증 작업을 판단하는 데 사용되며, 이 예제에서는 reqeust가 비어 있는지 확인하여 예외를 던지는 데 사용됩니다.

당신이 사용할 때:

WebUtils.setSessionAttribute(request, "user", User);
User user = (User)WebUtils.getSessionAttribute(request, "user");

읽어주셔서 감사합니다. 많은 도움이 되길 바랍니다. 많은 지원에 감사합니다!