저는 몇 달 전부터 PHP를 사용하기 시작했습니다.웹 사이트의 로그인 시스템을 만들기 위해 쿠키와 세션 및 그 차이점을 읽습니다(쿠키는 사용자의 브라우저와 서버의 세션에 저장됩니다).그 당시 저는 쿠키를 선호했습니다(그리고 누가 쿠키를 싫어합니까?!).“누가 신경써?서버에 저장하는 것은 좋은 방법이 아니기 때문에, 저는 학사 졸업 프로젝트에 쿠키를 사용했습니다.다만, 앱의 대부분을 한 결과, 유저의 ID를 보존하는 특정의 경우는 세션이 적당하다고 들었습니다.그래서 저는 배심원들이 왜 세션 대신 쿠키를 사용했냐고 묻는다면 뭐라고 말할까 고민하기 시작했습니다.그 이유(사용자에 대한 정보를 내부에 저장할 필요가 없기 때문)가 있습니다.그 정도면 충분한 이유일까요?아니면 그 이상인가요?
쿠키를 사용하여 사용자 ID를 유지할 때의 장단점을 알려주시겠습니까?
Stack Overflow에 계신 여러분 모두 감사합니다!
질문에 대한 답변
이 개념은 웹 방문자를 위해 페이지 로드에 걸쳐 영구 데이터를 저장하는 것입니다.쿠키는 클라이언트에 직접 저장합니다.세션은 cookie를 일종의 키로 사용하여 서버 측에 저장된 데이터와 관련짓습니다.
실제 값은 클라이언트에서 숨겨지고 데이터가 만료되어 비활성화되는 시기를 제어할 수 있으므로 세션을 사용하는 것이 좋습니다.모든 것이 쿠키에 기반한 경우 사용자(또는 해커)는 쿠키 데이터를 조작하여 사이트에 대한 요청을 재생할 수 있습니다.
편집: 쿠키를 사용하는 것은 단순함 이외에는 장점이 없다고 생각합니다.이렇게 보면…사용자가 자신의 ID 번호를 알아야 할 이유가 있습니까?통상, 유저에게는 이 정보가 필요 없습니다.정보를 제공하는 것은 알아야 할 필요성에 따라 제한되어야 한다.사용자가 쿠키를 다른 ID로 변경하면 응용 프로그램은 어떻게 반응합니까?보안상의 위험입니다.
세션이 대유행하기 전에는 기본적으로 저만의 구현이 있었습니다.클라이언트에 고유한 쿠키 값을 저장하여 영구 데이터와 함께 데이터베이스에 저장했습니다.그런 다음 페이지 요청 시 이러한 값을 대조하여 클라이언트가 이 값을 제어할 수 없도록 영속적인 데이터를 확보했습니다.
그 둘을 구별하기 위한 기본적인 생각.
세션:
- UID는 서버(서버 측)에 저장됩니다.
- 보다 안전함 (1의 장점)
- 만료는 설정할 수 없습니다. 사용자가 브라우저를 닫으면 세션 변수가 만료됩니다.(기본값으로 24분 동안 php에 저장됩니다.)
쿠키:
- UID는 웹 브라우저(클라이언트 측)에 저장됩니다.
- 해커가 당신의 정보를 입수할 수 있기 때문에 매우 안전하지 않다(1).
- 유효기간을 설정할 수 있습니다(자세한 내용은 setcookies() 참조).
세션은 계산, 측정, 쿼리 등의 변수와 같은 단기 정보/값을 저장해야 할 때 선호됩니다.
쿠키는 사용자의 계정과 같은 장기 정보/값을 저장해야 할 때 선호됩니다(컴퓨터를 2일 동안 종료해도 해당 사용자의 계정은 계속 로그인됩니다).대부분의 경우 쿠키가 채택되지 않기 때문에 쿠키의 예를 많이 생각할 수 없습니다.
SESSIONS ENDS WHEN USER CLOSES THEIR BROWSER,
COOKIES END DEPENDING ON THE LIFETIME YOU SET FOR IT. SO THEY CAN LAST FOR YEARS
이게 네 선택에 있어 가장 큰 차이점이야
ID를 장기간 기억하려면 쿠키를 사용해야 합니다.그렇지 않은 경우 웹 사이트에서 이 방문에 대한 사용자만 인식하도록 하려면 세션을 사용하는 것이 좋습니다.
세션은 php 서버가 생성하는 파일에 저장됩니다.어떤 파일이 어떤 사용자를 위한 것인지 기억하기 위해, php는 또한 이 세션 파일 ID를 유지하는 쿠키를 사용자의 브라우저에 설정하여 다음 방문 시 이 파일을 읽고 세션을 새로고침합니다.
디폴트로는 php는 인터벌마다 세션을 클리어하고 세션 명명 규칙에 따라 세션이 자동으로 만료됩니다.또한 브라우저가 닫히거나 이력이 클리어되면 브라우저는 세션 ID를 유지하는 쿠키를 보유하지 않습니다.
오늘날 브라우저는 LocalStorage, SessionStorage 및 javascript 코드가 사용자를 기억하기 위해 컴퓨터에 데이터를 저장하는 데 사용할 수 있는 다른 종류의 webdb 엔진도 지원합니다.예를 들어 Facebook 내에서 javascript 콘솔을 열고 “localStorage”를 입력하면 Facebook이 쿠키 없이 사용자를 기억하기 위해 사용하는 모든 변수를 볼 수 있습니다.
단답
우선순위에 따라 정렬된 규칙:
- 규칙 1. 사용자 입력을 신뢰하지 않음: 쿠키는 안전하지 않습니다.중요한 데이터에는 세션을 사용합니다.
- 규칙 2. 사용자가 브라우저를 닫을 때 영구 데이터를 유지해야 하는 경우 쿠키를 사용하십시오.
- 규칙 3. 사용자가 브라우저를 닫을 때 영구 데이터를 유지할 필요가 없는 경우 세션을 사용합니다.
- 규칙 4번, 정답을 자세히 읽어보세요!
출처 : https://www.lucidar.me/en/web-dev/sessions-or-cookies/
상세 답변
쿠키
- 쿠키는 클라이언트 측(방문자 브라우저)에 저장됩니다.
- 쿠키는 안전하지 않다: 쿠키 내용을 읽고 쓰는 것은 매우 쉽다.
- 쿠키를 사용할 때는 유럽법(GDPR)에 따라 방문자에게 통지해야 합니다.
- 유효기간은 설정할 수 있지만 사용자 또는 브라우저에서 변경할 수 있습니다.
- 사용자(또는 브라우저)는 쿠키 사용을 거부할 수 있습니다.
세션
- 세션은 서버 측에 저장됩니다.
- 세션에서는 쿠키를 사용합니다(아래 참조).
- 세션은 쿠키보다 안전하지만 무방비 상태는 아닙니다.
- 유효기간은 서버 설정으로 설정됩니다(예를 들어 php.ini).
- 기본 유효기간은 24분 또는 브라우저가 닫혀 있는 경우입니다.
- 만료는 사용자가 새로 고치거나 새 페이지를 로드하면 재설정됩니다.
- 사용자(또는 브라우저)는 쿠키(세션) 사용을 거부할 수 있습니다.
- 법적으로도 방문객에게 쿠키를 통보해야 하지만, 전례가 없는 것은 아직 확실치 않습니다.
적절한 선택
세션은 쿠키를 사용합니다!세션 데이터는 서버 측에 저장되지만 UID는 쿠키에 클라이언트 측에 저장됩니다.이를 통해 서버는 특정 사용자를 올바른 세션 데이터와 일치시킬 수 있습니다.UID는 보호되고 해킹이 어렵지만 뚫릴 수 없는 것은 아닙니다.중요한 액션(이메일 변경 또는 비밀번호 재설정)의 경우 세션에 의존하지 마십시오.쿠키도 없습니다.액션을 확인하기 위해 사용자 비밀번호를 입력해 주세요.
기밀 데이터는 쿠키(이메일, 암호화된 비밀번호, 개인 데이터 등)에 저장해서는 안 됩니다.데이터는 외부 컴퓨터에 저장되므로 컴퓨터가 개인(교실 또는 공용 컴퓨터)이 아닌 경우 다른 사용자가 쿠키 내용을 읽을 수 있습니다.
Remember-me 데이터는 쿠키에 저장해야 합니다. 그렇지 않으면 사용자가 브라우저를 닫으면 데이터가 손실됩니다.단, 비밀번호나 사용자 개인 데이터는 ‘리멤버 미’ 쿠키에 저장하지 마십시오.사용자 데이터를 데이터베이스에 저장하고 이 데이터를 쿠키에 저장된 암호화된 ID/키 쌍과 연결합니다.
위의 권장사항을 검토한 후 쿠키와 세션 중 하나를 선택하는 데 도움이 되는 질문은 다음과 같습니다.
사용자가 브라우저를 닫을 때 영구 데이터를 유지해야 합니까?
- 답이 “예”인 경우 쿠키를 사용합니다.
- 응답이 “아니오”인 경우 세션을 사용합니다.
#ID를 쿠키로 저장하여 로그인한 사용자를 인식하면 실제로는 사용자와 관련이 없는 데이터가 사용자에게 표시됩니다.또, 서드 파티가 브라우저로 랜덤 ID 를 cookie 데이터로 설정하려고 하면, 실제로는 유저가 아닌 것을 서버에 납득시킬 수 있습니다.그건 보안이 부족해요.
당신은 쿠키를 사용했고, 당신이 말한 것처럼 당신은 프로젝트의 대부분을 이미 완료했습니다.게다가 cookie는 세션이 더 빨리 종료되는 동안 오랫동안 남아 있을 수 있는 특권이 있습니다.따라서 이 경우 세션은 적합하지 않습니다.실제로 많은 유명하고 인기 있는 웹사이트와 서비스들이 쿠키를 사용하고 있으며, 오랜 시간 동안 로그인 상태를 유지할 수 있습니다.하지만 어떻게 하면 더 안전한 로그인 프로세스를 만들 수 있을까요?
아이디어는 다음과 같습니다.쿠키 사용법에 도움이 됩니다.로그인한 사용자를 인식하기 위해 ID 대신 랜덤 키를 사용하면 첫째, 랜덤 사용자에게 기본 데이터가 유출되지 않으며 둘째, 랜덤 키가 충분히 크다고 생각하면 누구나 키를 추측하거나 랜덤 키를 만드는 것이 어려워집니다.예를 들어, 사용자 브라우저에 다음과 같은 40 길이의 키를 저장할 수 있습니다. “KUYTYRFU7987gJHFJ543JHBJHCF5645「UYTUYJH54657jguthfn」이라고 하면, 누구라도 정확한 키를 작성해, 다른 사람으로서 행세할 가능성은 낮아집니다.