파이썬을 사용하여 웹 응용 프로그램 개발을 배우기 시작했습니다. ‘쿠키’와 ‘세션’이라는 용어를 접하고 있습니다. 쿠키가 브라우저의 키 값 쌍에 일부 정보를 저장한다는 점에서 쿠키를 이해합니다. 그러나 세션과 관련하여 약간의 혼란이 있습니다. 세션에서도 사용자 브라우저의 쿠키에 데이터를 저장합니다.
예를 들어 – 나는하여 로그인 username='rasmus'
하고 password='default'
. 이 경우 인증 된 경우 데이터를 확인하고 로그인해야하는 서버에 데이터가 게시됩니다. 그러나 전체 프로세스 중에 서버는 세션 ID를 생성하여 내 브라우저의 쿠키에 저장됩니다. 이제 서버는이 세션 ID를 파일 시스템 또는 데이터 저장소에 저장합니다.
그러나 세션 ID를 기준으로 사이트를 통한 후속 순회 중에 내 사용자 이름을 어떻게 알 수 있습니까? 이 키가 같은 세션 ID 및 세부 사항 일 것 딕셔너리로 서버에 데이터를 저장합니까 username
, email
값 수 등?
나는 여기에 상당히 혼란스러워지고 있습니다. 도움이 필요하다.
답변
HTTP는 상태가 없으므로 요청을 다른 요청에 연결하려면 HTTP 요청간에 사용자 데이터를 저장하는 방법이 필요합니다.
쿠키 또는 URL 매개 변수 (예 : http://example.com/myPage?asd=lol&boo=no 등 )는 둘 이상의 요청간에 데이터를 전송하는 데 적합한 방법입니다. 그러나 클라이언트 측에서 데이터를 읽거나 편집 할 수 없도록하려는 경우에는 좋지 않습니다.
해결책은 해당 데이터 서버 측을 저장하고 “id”를 제공 한 다음 클라이언트에게 해당 ID 만 알 수 있고 모든 http 요청에서 다시 전달하도록하는 것입니다. 거기서 세션이 구현되었습니다. 또는 클라이언트를 편리한 원격 저장소로 사용할 수 있지만 데이터를 암호화하고 비밀 서버 쪽을 유지합니다.
사람들이 다른 사람의 세션을 가로 채지 않기를 원하거나 세션이 영원히 지속되는 것이 아니라 만료되기를 원하는 등 다른 측면도 고려해야합니다.
특정 예에서, 사용자 ID (사용자 데이터베이스의 사용자 이름 또는 다른 고유 ID 일 수 있음)는 성공적인 식별 후 서버 측 세션 데이터에 저장됩니다. 그런 다음 클라이언트에서받는 모든 HTTP 요청에 대해 세션 ID (클라이언트가 제공 한)는 인증 된 사용자 ID가 포함 된 올바른 세션 데이터 (서버에 의해 저장 됨)를 알려줍니다. 이야기하고 있습니다.
답변
유추에 의한 간단한 설명
당신이 당신의 계좌에서 돈을 얻으려고 노력하는 은행에 있다고 상상해보십시오. 그러나 어둡습니다. 은행은 검은 색입니다. 빛이 없으며 얼굴 앞에서 손을 볼 수 없습니다. 당신은 다른 20 명으로 둘러싸여 있습니다. 그들은 모두 똑같이 보입니다. 그리고 모두 같은 목소리를 가지고 있습니다. 그리고 모두 잠재적 인 나쁜 사람입니다. 즉, HTTP는 상태 비 저장입니다.
이 은행은 재미있는 유형의 은행입니다. 논쟁을 위해 일이 어떻게 작동하는지 여기에 있습니다.
- 당신은 줄을 서서 (또는 온라인으로) 당신과 거래원에게 이야기합니다 : 돈을 인출하라는 요청을 한 다음,
- 소파에서 잠시 기다려야하고 20 분 후에
- 당신은 가서 출납원으로부터 실제로 돈을 모아야합니다.
하지만 텔러는 어떻게 다른 사람들과 구분할 수 있습니까?
출납원은 당신을 보거나 쉽게 알아볼 수 없습니다. 불이 모두 꺼 졌기 때문에 기억하십시오. 당신의 텔러가 다른 사람에게 $ 10,000의 인출을한다면 – 잘못된 사람?! 출납원이 귀하를 인출 한 사람으로 인식 할 수 있어야 요청한 돈 (또는 자원)을 얻을 수 있습니다.
해결책:
당신이 처음으로 출납원에게 나타나면, 그 또는 그녀는 당신에게 비밀로 무언가를 알려줍니다 :
“당신이 나에게 말을 할 때마다, 당신은 먼저 자신을 GNASHEU329로 식별해야합니다.
그 누구도 비밀 암호를 모른다.
현금 인출 방법의 예 :
그래서 나는 가서 20 분 동안 휴식을 취하기로 결정했다가 나중에 출납원에게 가서 “출금을 받고 싶다”고 말합니다.
텔러가 나에게 묻습니다. “당신은 누구십니까 ??!”
“저는 George Banks입니다!”
“증명!”
그리고 나는 그들에게 내 암호를 알려줍니다 : GNASHEU329
“확실히 Mr Banks!”
기본적으로 세션이 작동합니다. 수백만의 바다에서 하나를 고유하게 식별 할 수 있습니다. 출납원을 대할 때마다 자신을 식별해야합니다.
궁금한 점이 있거나 확실하지 않은 경우 의견을 게시하면 해결해 드리겠습니다.
사진을 통한 설명 :
답변
“세션”은 사용자가 웹 사이트를 탐색하는 시간을 나타내는 데 사용되는 용어입니다. 사이트의 페이지에 처음 도착한 후 사이트 사용을 중단 할 때까지의 시간을 나타냅니다. 실제로 사용자가 언제 사이트를 완료했는지 알 수 없습니다. 대부분의 서버에는 동일한 사용자가 다른 페이지를 요청하지 않는 한 세션을 자동으로 종료하는 시간 초과가 있습니다.
사용자가 처음으로 일종의 세션 ID를 연결할 때 생성되는 방법은 웹 서버 소프트웨어 및 사이트에서 사용중인 인증 / 로그인 유형에 따라 다릅니다. 쿠키와 마찬가지로 보안 문제이기 때문에 일반적으로 더 이상 URL로 전송되지 않습니다. 대신에 집합 적으로 세션이라고도하는 다른 많은 것들과 함께 저장됩니다. 세션 변수는 쿠키와 유사합니다. 쿠키는 페이지 요청과 함께 전송되어 서버에서 페이지와 함께 반환되는 이름-값 쌍이지만 이름은 웹 표준으로 정의됩니다.
일부 세션 변수는 HTTP 헤더 로 전달됩니다 . 그들은 모든 페이지 탐색의 장면에서 앞뒤로 전달되므로 브라우저에 표시되지 않으며 모든 사람에게 비공개 정보를 알려줍니다. 그중에는 USER_AGENT 또는 페이지를 요청하는 브라우저 유형, REFERRER 또는 요청중인 페이지에 연결된 페이지 등이 있습니다. 일부 웹 서버 소프트웨어는 자체 헤더를 추가하거나 서버 소프트웨어에 특정한 추가 세션 데이터를 전송합니다. 그러나 표준은 잘 문서화되어 있습니다.
희망이 도움이됩니다.
답변
HTTP는 상태 비 저장 연결 프로토콜입니다. 즉, 서버는 다른 사용자의 다른 연결을 구별 할 수 없습니다.
따라서 쿠키가옵니다. 일단 클라이언트가 서버에 처음 연결되면 서버는 새 세션 ID를 생성하고 나중에이 쿠키를 클라이언트에 쿠키 값으로 보냅니다. 이제부터이 세션 ID는 해당 클라이언트 연결을 식별합니다. 각 HTTP 요청 내에서 쿠키 내에 적절한 세션 ID가 표시되기 때문입니다.
이제 각 세션 ID에 대해 서버는 일부 데이터 구조를 유지하므로 사용자에게 고유 한 데이터를 저장할 수 있습니다.이 데이터 구조는 세션을 추상적으로 호출 할 수 있습니다.
답변
단기간 메모리 손실이있는 사람 (A)으로 HTTP를 생각하고 그 사람이 시야를 벗어나 자마자 모든 사람을 잊어 버리십시오.
이제 다른 사람을 기억하기 위해 A는 그 사람의 사진을 찍어 보관합니다. 각 개인의 사진에는 ID 번호가 있습니다. 그 사람이 다시 시야에 들어 오면 그 사람은 자신의 ID 번호를 A에게 알리고 A는 자신의 사진을 ID 번호로 찾습니다. 그리고 !!, A는 그 사람이 누구인지 알고 있습니다.
HTTP도 마찬가지입니다. SHORT TERM MEMORY LOSS로 고통 받고 있습니다. 세션을 사용하여 웹 사이트를 사용하는 동안 수행 한 모든 작업을 기록 한 다음 다시 올 때 쿠키의 도움으로 쿠키를 식별합니다 (쿠키는 토큰과 같습니다). 사진은 세션이고 ID는 쿠키입니다.