Session、LocalStorage、Cache-Control
1. 사용자가 쿠키를 변경할 수 있는 문제를 어떻게 해결합니까
변수sessions를 설명합니다. 이것은hash입니다.
let sessions = {
}
로그인 때문에 이메일을 사용자에게 누설하였다
if(found){
response.setHeader('Set-Cookie':`sign_in_email=${email}`)
response.statusCode = 200
}
우리는 이렇게 쓰지 않는다. 우리는 그것에게sessionID를 만들어 준다
if(found){
let sessionId = Math.random() * 100000//
sessions[sessionId] = {sign_in_email:email}// email cookie , email sessions
response.setHeader('Set-Cookie':`sessionId=${sessionId}`)// sessionId
response.statusCode = 200
}
서버에 있습니다.js에서 루트 수정
if(path === '/'){
var string = fs.readFileSync('./index.html','utf8')
let cookies = ''
if(request.headers.cookie){
cookies = request.headers.cookie.split('; ')
}
let hash ={}
for(let i=0;i
무작위 수가 가장 안전하기 때문에 사용자의 정보를 조회할 수 없다.
면접관이 묻는다: 세션이 뭐예요?1. 서버가 쿠키를 통해 사용자에게 SessionId 2.SessionId는 서버의 작은 메모리 3에 해당합니다.사용자가 서버에 접근할 때마다 서버는 SessionId를 통해 대응하는 session을 읽고 사용자의 프라이버시 정보를 안다
쿠키의 3가지 특징 요약: 1.서버는 Set-Cookie 헤더를 통해 클라이언트에게 문자열 2를 제공합니다.클라이언트가 같은 도메인 이름의 웹 페이지에 접근할 때마다 이 문자열을 가져가야 합니다.클라이언트는 이 쿠키를 일정 시간 내에 저장해야 합니다. 4.쿠키는 기본적으로 사용자가 페이지를 닫으면 자동으로 효력을 상실하지만, 백그라운드 코드는 쿠키의 만료 시간을 임의로 설정할 수 있습니다.
Session의 특징: 만약에 내가 사용자의 ID나 이메일을 쿠키에 저장하면 사용자가 직접 변경할 수 있다.sessionId(랜덤 수)를 쿠키를 통해 클라이언트에게 보내기 2.클라이언트가 서버에 접근할 때 서버가 sessionId 3을 읽습니다.서버에 모든 세션 4를 저장하는 메모리 (해시 테이블) 가 있습니다.sessionId를 통해 우리는 사용자에 대응하는 프라이버시 정보를 얻을 수 있습니다.이 메모리 (하시 테이블) 는 서버의 모든session 이다
2. LocalStorage 소개 및 애플리케이션
LocalStorage는 html5에서 제공하는 API로 실질적으로hash(브라우저의 것)이고session은 서버의 해시표입니다.자주 사용하는 것은localstorage가 있다.setItem('a','1')、localstorage.getItem('a')、localstorage.clear () 는 현재 페이지의 해시를 조작하는 데 사용됩니다.CD의 메모리에 지속적으로 저장됩니다.LocalStorage의 가장 전형적인 응용 프로그램은 다음과 같습니다.
let already = localStorage.getItem(' ')
if(!already){
alert(' , , ……')
localStorage.setItem(' ',true)
}else{
}
LocalStorage의 특징: 1.LocalStorage는 HTTP와 무관합니다. 2.HTTP에는 LocalStorage 값이 없습니다. 3.같은 도메인 이름의 페이지만 서로 LocalStorage를 읽을 수 있습니다(같은 소스만큼 엄격하지 않음). 4.도메인 이름당 LocalStorage 최대 저장량은 5Mb 정도(브라우저마다 다름)5.상용 장면: 사용자에게 힌트를 준 적이 있는지 기록합니다(쓸모없는 민감하지 않은 정보는 없고 비밀번호를 기록할 수 없습니다).LocalStorage는 사용자가 캐시를 정리하지 않는 한 영구적으로 유효합니다. (ctrl+shift+delete, 설정에 들어가서 고급에서'쿠키 및 기타 사이트 데이터'를 선택하고'데이터 지우기'를 누르면 LocalStorage가 정리됩니다.)
SessionStorage(세션 스토리지)의 특징: 1, 2, 3, 4와 같은 5.세션 종료 후 사용자가 페이지를 닫으면 SessionStorage가 자동으로 비활성화됩니다.
3. 면접 문제:
Cookie 기반 세션 없음(초강불기)
4. 캐시 제어 Cache-Control
어떤 요청을 캐시하고 싶으면
response.setHeader('Cache-Control','max-age=30')
하나를 주십시오. 그러면 그 동안 그는 영원히 당신에게 요청하지 않을 것입니다. 그러면 다운로드 시간은 0입니다.왜 첫 페이지에 Cache-Control을 설정할 수 없습니까?Chrome은 설정된 시간 내에 코드가 업데이트되더라도 최신 버전을 얻을 수 없습니다. 사용자가 새로 고침한 것은 모두 낡은 캐시입니다. 위험이 있습니다.입구를 남겨야 하는데, 일반적으로 첫 페이지(특히 html)는 캐시를 설정하지 않는다.css와 js에 설정된max-age=10년, 업데이트가 있으면 URL을 변경합니다.css?v=2(또는.js?v=2), 이전의 캐시를 사용하지 않고 최신 버전으로 업그레이드합니다
요약: Cache-Control의 기능: Cache-Control은 브라우저가 한동안 브라우저에 접근하지 않고 로컬 하드디스크나 메모리로 응답하도록 할 수 있습니다. 이렇게 하면 요청도 없습니다.업데이트를 하려면 입구 (일반적으로 html) 에서 URL을 조금만 변경하면 캐시를 사용하지 않고 브라우저가 최신 버전을 다운로드합니다.
5. Expires
Cache-Control
응답 헤더에 "max-age"또는 "s-max-age"명령을 설정하면 Expires
헤더는 무시됩니다.Cache-Control을 우선 사용하며 Expires는 이전 버전으로 업그레이드되었습니다.차이점은 Cache-Control이 만료된 시간이 얼마나 되는지, Expires가 만료된 시간이 언제인지입니다.
6. Etag
Etag는 파일 버전 번호를 주는md5는 요약 알고리즘으로 하나의 파일을 문자열로 만든다. 만약에 이 파일이 어느 곳에서 바뀌면 차이가 큰 문자열로 변하고 하나의 내용이 하나의md5에 대응한다.만약 하나의 내용 차이가 매우 작다면md5가 계산한 문자열의 차이가 매우 크다. 즉, 이것은 작은 차이를 확대할 수 있다.
만약 당신의md5가 내가 지난번에 저장한md5와 같다면, 다운로드할 필요가 없다는 것을 설명합니다
7. 수업 후 문제 및 답안
response.setHeader('Expires,'xxx')
xxx를 그리니치 시간으로 설정하거나 response.setHeader('Cache-Control','max-age=yyy')
yyyy를 설정하면 몇 초 후 쿠키가 효력을 상실합니다.(2) 쿠키에 만료 시간을 설정하면 자동으로 삭제 document.cookie = 'test=xxxx;Expires='+new Date(0).toGMTString()
또는 document.cookie = 'test=xxxx;max-age=0'
//이 방법으로 쿠키를 즉시 삭제 ('Cache-Control','max-age=1000')
는 캐시 만료 시간을 1000초로 설정한 후 이 기간 동안 캐시를 우선적으로 사용하며 HTTP 요청이 발생하지 않습니다.(2) Etag는 요청을 보내야 합니다.Etag는 마커 (md5 문자열) 를 설정하고 이 자원을 다시 가져올 때 요청에 If-None-Match:xxx
를 추가하면 이 마커를 비교합니다. 바뀌지 않으면 304 상태 코드를 되돌려줍니다. 파일이 바뀌지 않았으면 계속 사용할 수 있고 바뀌면 새 내용을 되돌려줍니다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.