HTTP Cookie 상태 관리 메커니즘 자세히 알 아 보기

HTTP cookies 는 일반적으로'cookies'라 고도 부 르 는데 이미 오랫동안 존재 해 왔 지만 아직 충분히 이해 되 지 않 았 다.가장 중요 한 문 제 는 cookies 가 뒷문 프로그램 이나 바이러스 라 고 생각 하거나 어떻게 작 동 하 는 지 전혀 모른다 는 잘못된 부분 이 많다 는 것 이다.두 번 째 문 제 는 cookies 에 일치 하 는 인터페이스 가 부족 하 다 는 것 이다.이러한 문제 에 도 불구 하고 cookies 는 웹 개발 에서 이렇게 중요 한 역할 을 하기 때문에 쿠키 가 대체 품 이 없 는 상황 에서 사라 지면 우리 가 좋아 하 는 웹 응용 은 쓸모 가 없 게 될 것 이다.
쿠키 의 기원
쿠키 는 최초 로 인터넷 회사 의 직원 인 Lou Montulli 가 1993 년 3 월 에 발 명 된 후에 W3C 에 의 해 채택 되 었 고 현재 쿠키 는 표준 이 되 었 으 며 IE,Chrome,Firefox,Opera 등 모든 주류 브 라 우 저 를 지원 합 니 다.
쿠키 의 탄생 은 HTTP 프로 토 콜 의 타고 난 결함 때 문 입 니 다.HTTP 는 무상 태 프로 토 콜 입 니 다.간단 한 Request 와 Response 는 요청/응답 이 끝나 면 클 라 이언 트 와 서버 의 연결 이 닫 히 고 데 이 터 를 다시 교환 하려 면 새로운 연결 이 필요 합 니 다.서버 가 어떤 클 라 이언 트 인지 연결 에서 세 션 을 추적 할 수 없다 는 뜻 이다.
로그 인/카 트 와 같은 전형 적 인 응용 은 실현 되 지 않 는 다.예 를 들 어 사용자 A 가 쇼핑 몰 에서 구 매 하 는 상품 은 모두 A 의 카 트 에 넣 어야 한다.사용자 A 가 언제 구 매 하 든 이것 은 같은 세 션 에 속 하 는 것 으로 사용자 B 나 사용자 C 의 카 트 에 넣 을 수 없다.이것 은 같은 세 션 에 속 하지 않 는 다.
기본 원 리 는 그림 과 같다.

2.쿠키 조작
쿠키 에 대한 조작 은 다음 과 같 습 니 다.
1.이름(이름)
2.값(Value)
3.도 메 인(도 메 인)
4.경로(경로)
5.실효 날짜(Expires)
6.보안 표지(보안)
7.HttpOnly(서버 쪽 만)
쿠키 는 대부분 서버 에서 만 들 고 JS 에서 도 쿠키 를 만 들 수 있 지만 HttpOnly 형식의 JS 는 만 들 수 없습니다.
브 라 우 저 에서 제공 하 는 쿠키 API(document.cookie)는 너무 초라 해서 조금 만 밀봉 할 수 있 습 니 다.예 를 들 어 setter/getter 방식 으로 쿠키 함 수 를 사용 하면 훨씬 편리 합 니 다.

/*
* JS  cookie  cookie  
*
* ** cookie**
* cookie(name)
*
* ** cookie**
* cookie(name, value)
* cookie(name, value, option)
*/
var cookie = function(name, value, option) {
var doc = document
if (value != undefined) { // set 
option = option || {}
if (value === null) {
value = ''
option.expires = -1
}
var expires = ''
if (option.expires && (typeof option.expires == 'number' || option.expires.toUTCString)) {
var date = new Date
if (typeof option.expires == 'number') {
date.setTime(date.getTime() + (option.expires * 24 * 60 * 60 * 1000))
} else {
date = option.expires
}
// for IE
expires = '; expires=' + date.toUTCString()
}
var path = option.path ? '; path=' + option.path : ''
var domain = option.domain ? '; domain=' + option.domain : ''
var secure = option.secure ? '; secure' : ''
doc.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('')
} else { // get 
var cookieValue = null
if (doc.cookie && doc.cookie != '') {
var cookies = doc.cookie.split(';')
for (var i = 0; i < cookies.length; i++) {
var cookie = $.trim(cookies[i]).split('=')
if ( cookie[0] == name && cookie.length > 1 ) {
try {
cookieValue = decodeURIComponent(cookie[1])
} catch(e) {
cookieValue = cookie[1]
}
break
}
}
}
return cookieValue
}
}; 
물론 더 편리 한 것 도 있다.https://github.com/florian/cookie.js,더 많은 편리 함 수 를 제공 합 니 다.
3.쿠키 유형
1.일반 쿠키,서버 쪽 과 JS 모두 생 성 가능,JS 접근 가능
2.HttpOnly 쿠키 는 서버 에서 만 생 성 되 며 JS 는 읽 을 수 없습니다.주로 보안 을 고려 합 니 다.
3.안전 한 쿠키(https 만),서버 쪽 과 JS 모두 만 들 수 있 고 JS 는 HTTPS 에서 만 접근 할 수 있 습 니 다.
예 를 들 어 시 나 닷 컴 클 라 우 드 테스트 페이지:http://snandy.sinaapp.com/php/cookie.php저 는 3 개의 쿠키 를 심 었 습 니 다.각각 c1,c2,c3 입 니 다.

$d1 = mktime(1,1,1,1,1,2018);
//   cookie
setcookie("c1", "Jack", $d1); 
//    cookie, https, 6   
setcookie("c2", "John", $d1, NULL, NULL, TRUE); 
// HttpOnly cookie  7   
setcookie("c3", "Resig", $d1, NULL, NULL, NULL, TRUE); 
Firefox 로 접근

내 가 심 은 세 가 지 는 모두 있 는데,saeut 는 시 나 닷 컴 구름 이 심 은 것 이다.
firebug 콘 솔 에 document.cookie 를 입력 하 십시오.

보 실 수 있 습 니 다.c2,c3 는 모두 접근 할 수 없습니다.c2 는 안전 한 쿠키 입 니 다.https 프로 토 콜 에서 방문 해 야 합 니 다.c3 는 httpOnly 이 고 JS 는 접근 할 수 없습니다.이것 은 주의해 야 합 니 다.
접근 프로 토 콜 을 https 로 변경:https://snandy.sinaapp.com/php/cookie.phpfirebug 를 콘 솔 로 전환 하고 document.cookie 를 입력 하면 c2 를 볼 수 있 습 니 다.

4.쿠키 의 구덩이

1.쿠키 가 너무 많 거나 수량 이 너무 많 을 때 페이지 방문 오류 가 발생 합 니 다.예 를 들 어 다음 과 같은 알림 이 나타 납 니 다.
따라서 사이트 의 쿠키 는 관리 가 필요 하고 함부로 쿠키 를 심 을 수 없습니다.또한 path 를 지정 하여 쿠키 를 지정 한 범위 내 에 한정 합 니 다.
웹 사이트 browsercookielimits.squawky.net,각 브 라 우 저 쿠키 크기 기록

2.중국 어 를 저장 하려 면 유 니 코드 인 코딩(encodeURIComponent)이 필요 합 니 다.

좋은 웹페이지 즐겨찾기