>  기사  >  Java  >  쿠키와 세션 비교

쿠키와 세션 비교

巴扎黑
巴扎黑원래의
2017-07-21 16:58:401227검색
1. 쿠키 메커니즘과 세션 메커니즘의 차이점

 구체적으로 쿠키 메커니즘은 클라이언트 측에서 상태를 유지하는 솔루션을 채택하고, 세션 메커니즘은 서버 측에서 상태를 유지하는 솔루션을 채택합니다.
동시에 서버 측에서 상태를 유지하는 솔루션도 클라이언트 측에서 ID를 저장해야 하므로 세션 메커니즘은 ID 저장 목적을 달성하기 위해 쿠키 메커니즘을 사용해야 할 수도 있습니다. 하지만 실제로는 다른 옵션이 있습니다.
2. 세션 쿠키와 영구 쿠키의 차이점
만료 시간이 설정되지 않으면 이 쿠키의 수명 주기는 브라우저 창이 닫혀 있는 한 사라집니다. 탐색 세션 동안 지속되는 쿠키를 세션 쿠키라고 합니다. 세션 쿠키는 일반적으로 하드 디스크에 저장되지 않고 메모리에 저장됩니다.
 만료 시간이 설정되면 브라우저는 쿠키를 하드 드라이브에 저장합니다. 브라우저를 닫았다가 다시 열면 해당 쿠키는 설정된 만료 시간이 초과될 때까지 계속 유효합니다.
  하드 드라이브에 저장된 쿠키는 두 개의 IE 창 등 서로 다른 브라우저 프로세스 간에 공유될 수 있습니다. 브라우저마다 메모리에 저장된 쿠키를 처리하는 방법이 다릅니다.
3. 자동 로그인 사용 방법
사용자가 웹사이트에 등록하면 고유한 사용자 ID를 가진 쿠키를 받게 됩니다. 클라이언트가 나중에 다시 연결되면 이 사용자 ID가 자동으로 반환되고 서버는 이를 확인하여 자동 로그인이 선택된 등록된 사용자인지 확인하므로 사용자는 명시적인 사용자 이름과 비밀번호를 제공하지 않고도 서버의 리소스에 액세스할 수 있습니다.
4. 사용자 선호에 따라 사이트를 맞춤화하는 방법
웹사이트는 쿠키를 사용하여 사용자의 희망 사항을 기록할 수 있습니다. 간단한 설정의 경우 웹사이트는 페이지 설정을 쿠키에 직접 저장하여 사용자 지정을 완료할 수 있습니다. 그러나 더 복잡한 사용자 정의의 경우 웹사이트는 사용자에게 고유 식별자만 보내면 되며 서버측 데이터베이스는 각 식별자에 해당하는 페이지 설정을 저장합니다.
5. 쿠키 보내기
1. 쿠키 개체 만들기
2. 최대 만료 날짜 설정
3. 쿠키를 HTTP 응답 헤더에 넣기
쿠키를 만들어 브라우저에 보내는 경우 기본적으로 A 세션입니다. -레벨 쿠키: 브라우저의 메모리에 저장되고 사용자가 브라우저를 종료한 후 삭제됩니다. 브라우저가 쿠키를 디스크에 저장하도록 하려면 maxAge를 사용하고 시간을 초 단위로 지정해야 합니다. 최대 수명을 0으로 설정하면 브라우저가 쿠키를 삭제하도록 지시합니다.
 쿠키를 보내려면 HttpServletResponse의 addCookie 메소드를 사용하여 Set-Cookie HTTP 요청 헤더에 쿠키를 삽입해야 합니다. 이 메소드는 이전에 지정된 Set-Cookie 헤더를 수정하지 않고 새 헤더를 생성하므로 setCookie 대신 이 메소드 addCookie를 호출합니다. 또한 문서 콘텐츠가 클라이언트에 전송되기 전에 응답 헤더를 설정해야 한다는 점을 기억하세요.
6. 쿠키 읽기
1. request.getCookie 호출
브라우저에서 보낸 쿠키를 얻으려면 HttpServletRequest의 getCookies 메소드를 호출해야 합니다. 이 호출은 Cookie 헤더에 입력된 값에 해당하는 Cookie 객체의 배열을 반환합니다. HTTP 요청에서.
2. 관심 있는 쿠키를 찾을 때까지 배열을 반복하고 각 쿠키의 getName 메소드를 호출하세요.
 쿠키는 서블릿이나 JSP 페이지가 아닌 호스트(도메인)와 관련되어 있습니다. 따라서 서블릿은 단일 쿠키만 보낼 수 있지만 관련 없는 쿠키를 많이 받을 수도 있습니다.
예:
String cookieName = “userID”;
쿠키 쿠키[] = request.getCookies();
if (cookies!=null){
for(int i=0;i
쿠키 쿠키 = 쿠키[i] ;
if (cookieName.equals(cookie.getName())){
doSomethingWith(cookie.getValue());
}
}
}
7. 쿠키를 사용하여 최초 방문자를 감지하는 방법
A. .getCookies() 쿠키 배열을 얻습니다.
B. 지정된 이름을 가진 쿠키가 존재하는지, 해당 값이 올바른지 여부를 검색합니다.
C. 그렇다면 루프를 종료하고 구별 표시를 설정합니다.
D. 구별된 표시를 기준으로 이용자를 최초 방문자로 간주하여 차이를 만들어 내는 운영
8. 쿠키를 사용하여 최초 방문자를 감지할 때 흔히 저지르는 실수
특정 데이터만으로는 해당 사용자를 최초 방문자로 간주할 수 없습니다. 쿠키 배열에 항목이 존재하지 않는 경우, 해당 고객은 최초 방문자일 수 있습니다.
 그러나 배열이 null이 아닌 경우. 이는 고객이 귀하의 웹사이트나 도메인을 방문했다는 것만 보여줄 뿐, 다른 서블릿을 방문했다는 의미는 아닙니다. JSP 페이지와 비Java 웹 애플리케이션은 경로 설정에 따라 쿠키를 설정할 수 있습니다. 올바른 접근 방식은 쿠키 배열이 비어 있는지와 지정된 쿠키 개체가 존재하는지 확인하는 것입니다.
9. 쿠키 속성 사용에 대한 참고 사항
 속성은 서버에서 서버로 전송되는 헤더의 일부입니다. 그러나 이는 브라우저가 서버에 반환하는 헤더의 일부가 아닙니다.
 따라서 쿠키 속성은 서버에서 클라이언트로 출력되는 쿠키에만 적용됩니다.
이러한 속성이 설정되어 있지 않습니다.따라서 request.getCookies를 통해 얻은 쿠키에서는 이 속성을 사용하지 마십시오. 이는 쿠키의 최대 수명을 설정하고, 쿠키를 내보내고, 후속 입력 배열에서 적절한 쿠키를 찾고, 해당 값을 읽고, 수정하고, 쿠키에 다시 저장하는 것만으로는 쿠키 값 변경을 구현할 수 없음을 의미합니다. .
10. 쿠키를 사용하여 각 사용자의 액세스 횟수를 기록하는 방법
1. 사용자 방문 횟수를 계산하는 데 특별히 사용되는 쿠키 배열에서 값을 가져옵니다.
3. . 값에 1을 추가하고 원래 이름을 사용합니다. 쿠키 개체 다시 만들기
4. 최대 에이징 재설정
5. 새 쿠키 출력
11. 다양한 환경에서 세션의 다른 의미
세션, 중국어는 다음과 같이 번역되는 경우가 많습니다. 세션의 원래 의미는 시작과 끝을 의미합니다. 전화 걸기와 같은 일련의 동작/메시지는 전화를 받는 것부터 전화를 걸고 끊는 것까지의 일련의 과정을 의미합니다. 세션.
 그러나 세션이라는 단어가 네트워크 프로토콜과 연관될 때 종종 "연결 지향" 및/또는 "상태 유지"라는 두 가지 의미를 의미합니다.
 웹 개발 환경에서 세션의 의미가 확장되었습니다. 클라이언트와 서버 간의 상태를 유지하는 데 사용되는 솔루션 유형을 의미합니다. 때때로 세션은 이 솔루션의 스토리지 구조를 참조하는 데 사용되기도 합니다.
12. 세션 메커니즘
 세션 메커니즘은 서버 측 메커니즘으로, 정보를 저장하기 위해 해시 테이블과 유사한 구조를 사용합니다(또는 해시 테이블을 사용할 수도 있음).
 그러나 프로그램이 클라이언트 요청에 대한 세션을 생성해야 할 때 서버는 먼저 클라이언트의 요청에 세션 ID라고 하는 세션 식별자가 포함되어 있는지 확인합니다. 이미 세션 ID가 포함되어 있으면 이 클라이언트에 대해 세션이 생성되었음을 의미합니다. 이전에 세션을 전달한 후 서버는 세션 ID에 따라 세션을 검색하여 사용합니다(검색할 수 없는 경우 새로 생성할 수 있습니다. 이러한 상황은 서버가 해당 세션 개체를 삭제한 경우에 발생할 수 있습니다. 사용자이지만 사용자가 요청한 JSESSION 매개변수를 인위적으로 추가한 경우 URL에 추가됩니다.
 클라이언트 요청에 세션 ID가 포함되어 있지 않으면 이 클라이언트에 대한 세션이 생성되고 이 세션과 연결된 세션 ID가 이 응답에 저장되도록 클라이언트에 반환됩니다.
13. 세션 ID를 저장하는 여러 가지 방법
A. 세션 ID는 쿠키를 사용하여 저장할 수 있으므로 상호 작용 중에 브라우저는 규칙에 따라 이 ID를 서버에 자동으로 보낼 수 있습니다.
비. 쿠키는 인위적으로 비활성화될 수 있으므로 쿠키가 비활성화된 경우 세션 ID를 서버에 다시 전달하는 다른 메커니즘이 있어야 합니다. 일반적으로 사용되는 기술은 URL 끝에 세션 ID를 추가하는 것입니다. 경로를 추가하는 방법에는 두 가지가 있습니다. 하나는 URL 경로에 추가 정보를 추가하는 것이고, 다른 하나는 URL 끝에 쿼리 ​​문자열을 추가하는 것입니다. 네트워크는 전체 상호 작용 동안 상태를 유지하며 이 세션 ID는 클라이언트가 요청할 수 있는 모든 경로 끝에 포함되어야 합니다.
C. 또 다른 기술은 은닉 필드 형성이라고 합니다. 즉, 서버는 자동으로 양식을 수정하고 양식이 제출될 때 세션 ID가 서버로 다시 전달될 수 있도록 숨겨진 필드를 추가합니다.
14. 세션은 언제 생성됩니까? 클라이언트가 세션에 액세스하면 세션이 생성된다고 생각하는 것이 일반적인 실수입니다. 그러나 실제로는 서버측 프로그램(서블릿 등)이 이러한 명령문을 호출하기 전까지는 생성되지 않습니다. HttpServletRequest.getSession(true)이 생성됩니다.
15. 세션은 언제 삭제되나요?
다음과 같은 경우 세션이 삭제됩니다.
A. 프로그램은 HttpSession.invalidate()
B를 호출합니다. 클라이언트가 보낸 마지막 세션 ID 이후의 시간 간격이 세션의 최대 유효 시간을 초과했습니다
C. 서버 프로세스가 중지됩니다.
브라우저를 닫으면 클라이언트 브라우저의 메모리에 저장된 세션 쿠키만 무효화되고 서버 측 세션 개체는 무효화되지 않습니다.
16. URL 재작성의 단점은 무엇입니까
하이퍼링크, 양식 작업, 리디렉션된 URL을 포함한 모든 URL에 대해 URL 재작성을 사용하세요. 귀하의 사이트를 참조하는 각 URL과 사용자에게 반환되는 URL(서버 리디렉션의 위치 필드와 같은 간접적인 수단을 통해서라도)은 추가 정보를 추가합니다.
 즉, 사이트에 정적 HTML 페이지가 있을 수 없습니다(적어도 정적 페이지에는 사이트의 동적 페이지에 대한 링크가 있을 수 없음). 따라서 각 페이지는 서블릿이나 JSP를 사용하여 동적으로 생성되어야 합니다. 모든 페이지가 동적으로 생성되더라도 사용자가 세션을 종료했다가 북마크나 링크를 통해 다시 돌아오면 저장된 링크에 잘못된 식별 정보가 포함되어 있기 때문에 세션 정보가 손실됩니다. 즉, URL 뒤의 SESSION ID가 만료되었습니다.
17. 숨겨진 양식 필드를 사용할 때의 단점은 무엇입니까?
이 방법은 양식 제출을 통해 각 페이지가 동적으로 생성되는 경우에만 사용할 수 있습니다. 일반 하이퍼텍스트 링크를 클릭하면 양식 제출이 생성되지 않으므로 숨겨진 양식 필드는 일반적인 세션 추적을 지원할 수 없으며 온라인 상점의 결제 프로세스와 같은 일련의 특정 작업에서만 사용할 수 있습니다. 18. 세션 추적의 기본 단계
1. 현재 요청
2과 관련된 세션 개체에 액세스합니다. 대화 관련 정보 찾기
3. 세션 정보 저장
4. 세션 데이터 삭제
19 getSession()/getSession(true)과 getSession(false)
getSession()/getSession(true)의 차이점: 세션이 존재하면 세션을 반환하고, 그렇지 않으면 새 세션을 생성하고 객체를 반환합니다
getSession (false): 세션이 존재하면 세션을 반환합니다. 그렇지 않으면 세션이 생성되지 않고 null이 반환됩니다. 20. 정보를 세션과 연결하는 방법
No를 제공하려는 경우 SetAttribute가 이전에 설정된 값을 대체합니다. 교체, 값을 제거하려면 RemoveAttribute를 사용해야 합니다. 이 메소드는 HttpSessionBindingListener 인터페이스를 구현하는 모든 값의 valueUnbound 메소드를 트리거합니다.
21. 세션 속성 유형에 제한이 있나요? 일반적으로 세션 속성 유형은 객체만 있으면 됩니다. null 또는 int, double, boolean과 같은 기본 유형은 제외됩니다.
 기본 유형 값을 속성으로 사용하려면 해당 캡슐화된 클래스 객체로 변환해야 합니다.
22. 세션 데이터를 삭제하는 방법
A. 작성한 서블릿에 의해 생성된 데이터만 제거합니다.
removeAttribute("key")를 호출하여 지정된 키와 관련된 값을 삭제합니다
B. 전체 세션 삭제(현재 웹 애플리케이션에서):
무효화를 호출하여 전체 세션을 삭제합니다. 그렇게 하면 서블릿이나 JSP 페이지
C에서 생성된 세션 데이터뿐만 아니라 해당 사용자의 모든 세션 데이터가 손실됩니다. 시스템에서 사용자를 로그아웃하고 해당 사용자에게 속한 모든 세션을 삭제합니다.
logOut을 호출하여 웹 서버에서 클라이언트를 로그아웃하고 사용자와 관련된 모든 세션을 삭제합니다(웹 애플리케이션당 최대 하나). 이 작업은 서버의 여러 웹 응용 프로그램에 영향을 미칠 수 있습니다.
23. 사용자가 신규 사용자인지 기존 사용자인지 확인하기 위해 isNew를 사용하는 잘못된 방법
공개 부울 isNew() 메소드 세션이 아직 클라이언트 프로그램(브라우저)과 접촉하지 않은 경우 이 메소드는 true를 반환합니다. 이는 일반적으로 세션이 들어오는 고객 요청으로 인한 것이 아니라 새로운 세션이기 때문입니다.
  그러나 isNew가 false를 반환하는 경우 이는 이전에 웹 애플리케이션을 방문한 적이 있다는 의미일 뿐이며 서블릿이나 JSP 페이지를 방문한 적이 있다는 의미는 아닙니다.
 사용자와 관련된 세션이기 때문에 사용자가 이전에 방문했던 모든 페이지에서 세션이 생성되었을 수 있습니다. 따라서 isNew가 false인 경우에는 사용자가 이전에 웹 애플리케이션을 방문한 적이 있다는 의미일 뿐이며, 현재 페이지 또는 사용자가 이전에 방문한 페이지에서 세션을 생성할 수 있습니다.
 올바른 접근 방식은 세션에 특정 키가 존재하는지, 그 값이 올바른지 확인하는 것입니다
24. 쿠키 만료와 세션 시간 초과의 차이점은 무엇입니까? 세션 시간 초과는 쿠키 만료와 다르게 서버에서 유지됩니다. 날짜. 첫째, 세션은 일반적으로 영구 쿠키가 아니므로 만료 날짜가 없는 메모리 상주 쿠키를 기반으로 합니다. JSESSIONID 쿠키를 가로채더라도 만료 날짜가 설정되어 전송됩니다. 브라우저 세션과 서버 세션도 매우 다를 수 있습니다.
25. 세션 쿠키와 세션 개체의 수명 주기는 동일합니까?
사용자가 브라우저를 닫으면 세션 쿠키가 사라졌지만 세션 개체는 여전히 서버 측에 저장됩니다.
26. 브라우저가 닫히면 사라집니다
일반적으로 프로그램은 사용자가 로그오프할 때 세션을 삭제하라는 명령을 보냅니다. 그러나 브라우저는 종료되기 전에 서버에 적극적으로 알리지 않으므로 서버는 이를 알 수 없습니다. 브라우저가 닫혔습니다. 서버는 설정된 간격 동안 비활성화될 때까지 이 세션 개체를 유지합니다.
 이러한 오해의 이유는 대부분의 세션 메커니즘이 세션 ID를 저장하기 위해 세션 쿠키를 사용하기 때문입니다. 브라우저를 닫은 후 세션 ID가 사라지고 서버에 다시 연결하면 원래 세션을 찾을 수 없습니다.
 서버가 설정한 쿠키를 하드디스크에 저장하거나, 브라우저가 보낸 HTTP 요청 헤더를 어떤 방법으로 다시 써서 원래 세션 ID를 서버로 보내는 경우, 브라우저에서 원래 세션을 계속 찾을 수 있습니다. 다시 열립니다.
  브라우저를 닫아도 세션이 삭제되지 않고 서버가 세션 만료 시간을 강제로 설정하기 때문입니다. 클라이언트가 세션을 마지막으로 사용한 이후의 시간이 이 만료 시간을 초과하면 서버는 세션이 만료된 것으로 간주할 수 있습니다. 클라이언트가 활동을 중지하면 저장 공간을 절약하기 위해 세션이 삭제됩니다.
이를 통해 다음과 같은 결론을 내릴 수 있습니다.
브라우저를 닫으면 브라우저 메모리에 있는 세션 쿠키만 사라지지만 서버에 저장된 세션 개체가 사라지거나 사라지지는 않습니다. 영구 쿠키가 사라집니다.
27. 두 개의 브라우저 창을 열 때 동일한 세션을 사용합니까 아니면 다른 세션을 사용하여 응용 프로그램에 액세스합니까? 일반적으로 새 브라우저 창을 열고 동일한 페이지에 들어가면 시스템에서 새 세션을 제공합니다. id는 정보 공유 목적을 무너뜨릴 것입니다.
이때 먼저 영구 쿠키에 세션 ID를 저장한 다음(세션의 최대 유효 시간을 설정하여) 새 창에서 이를 읽어 이전 창의 세션 ID를 가져올 수 있습니다. 세션 쿠키와 영구 쿠키의 결합을 통해 창 간 세션 추적을 달성할 수 있습니다.
28. 세션을 활용하여 고객별 방문 횟수를 표시하는 방법
고객의 방문 횟수는 정수형 변수이므로 속성형에는 int, double, boolean 등의 기본형 변수를 사용할 수 없습니다. 이러한 기본 유형의 캡슐화된 유형 객체는 세션 객체의 속성 값으로 사용됩니다. 그러나 Integer는 불변 데이터 구조입니다. 생성된 후에는 변경할 수 없습니다. 이는 각 요청이 새로운 Integer 객체를 생성한 다음 setAttribute를 사용하여 이전에 존재했던 이전 속성의 값을 대체해야 함을 의미합니다. 예:
HttpSession session = request.getSession();
SomeImmutableClass value = (SomeImmutableClass)session.getAttribute(“SomeIdentifier”);
if (value= =null){
value = new SomeImmutableClass(…); 생성 불변 객체
}else{
value = new SomeImmutableClass(calculatedFrom(value)); // 값을 다시 계산한 후 새 객체 생성
}
session.setAttribute("someIdentifier",value); // 새로운 생성 사용 객체는 원래의 이전 객체를 덮어씁니다
29. 세션을 사용하여 사용자 데이터를 축적하는 방법
쓰기 가능한 필드가 있는 배열, 목록, 맵 또는 애플리케이션별 데이터 구조와 같은 변경 가능한 데이터 구조를 사용하세요. 이렇게 하면 객체가 처음 할당되지 않는 한 setAttribute를 호출할 필요가 없습니다. 예를 들어
HttpSession 세션 = request.getSession();
SomeMutableClass value = (SomeMutableClass)session.getAttribute("someIdentifier");
if(value == null){
value = new SomeMutableClass(...);
session .setAttribute( "someIdentifier", value);
}else{
value.updateInternalAttribute(...); // 객체가 이미 존재하는 경우 속성을 재설정하지 않고 해당 속성을 업데이트합니다.
}
변경할 수 없는 객체와 변경 가능한 객체 30개 세션 데이터 업데이트 시 다른 처리
 불변 객체는 일단 생성되면 변경할 수 없으므로 세션에서 속성 값을 수정하려고 할 때마다 setAttribute("someIdentifier", newValue)를 호출하여 원본을 교체해야 합니다. 그렇지 않으면 변경 가능한 객체는 일반적으로 자체 속성을 수정하는 메서드를 제공하므로 세션에서 속성 값을 수정하려고 할 때마다 변경 가능한 개체의 관련 수정 방법은 괜찮습니다. 이는 setAttribute 메소드를 호출할 필요가 없음을 의미합니다.

위 내용은 쿠키와 세션 비교의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.