먼저 브라우저에서 상태를 유지하는 방법을 결정해야합니다. 세션 쿠키를 사용하거나 각 페이지에서 세션 토큰을 전달 하시겠습니까? 쿠키 방식을 사용하는 경우 페이지 및 양식을 변경할 필요가 없지만 쿠키 관리가 아직 없으면 추가해야합니다 (session + httpOnly 쿠키 사용에주의하십시오).
서버에서 상태에 관한 데이터를 얻는 방법 : 이미 데이터베이스를 사용하고 있다면 "SESSION_ID"와 "EXPIRATION_DATE"열이있는 "SESSION"테이블과 "SESSION_ID"열이있는 "SESSION_DATA"라는 두 번째 테이블을 추가 할 수 있습니다. , "핵심 가치". 세션이 생성 할 수없는 경우
int session_createNewSession(long& session_id, long duration)
int session_setValue(long session, char[] key, char[] value)
int session_getValue(long session, char[] key, char[] value)
int session_abandonSession(long session)
이 함수는 오류 코드를 반환하거나 값을 얻을/설정 할 수 없습니다
이제 "그냥"몇 가지 간단한 기능을 만들어야합니다. 또한 오래된 세션을 삭제하기 위해 데이터베이스에서 정기적으로 실행되는 작업을 생성해야합니다. 이제이 곳에서 세션 시스템을 가지고
가, 나머지는 매우 간단합니다 :
- 검사에 의해 수신 된 데이터를 처리하여 CGI에서
- 가 로그인/암호가 맞다면 로그인 양식을 만듭니다 (비록 DB에서 암호를 저장하지 않습니다 접속이 OK 인 경우)
- 을 소금에 절인 해시를 저장
), 세션에서 사용자 ID를 저장 (또는 경우에, 당신은 단지 "IsAdmin"값을 절약 할 수
당신은 실제로 간단하게 할 수 있습니다 : 단지 session_createNewSession (long & session_id, int isAdmin)이 충분할 수 있지만 (단 하나의 데이터베이스 테이블 만 있으면) 클라이언트가 아마도 시간이 지남에 따라 더 많은 기능을 요청할 것입니다.
마지막주의 사항 : session_id가 들여 쓰여진 필드가 아닌 임의의 필드임을주의하십시오. 그렇지 않으면 다른 사람의 세션을 도용하는 것이 매우 간단합니다.
어떻게 것 I '기호'그와 내가 클라이언트가 로그인이 허가되어 있는지 확인하려면 어떻게해야합니까?비밀번호의 암호화 해시를 쿠키 키에 저장 하시겠습니까? 이 방법은 흥미 롭습니다. 나는 이런 식으로 뭔가를 간단하게 선호합니다. –
@Delan 암호 해시는 자주 변경되지 않으므로 쉽게 해킹 당할 수 있습니다. 그것은 날짜와 플러스 일부 응용 프로그램 상태 플러스 소금처럼 뭔가의 해시 것입니다. 클라이언트가 올바르게 서명되고 만료되지 않은 쿠키를 보낸 경우 그는 로그인하여 권한을 부여받습니다. –
@Delan 더 나은 해시는 쿠키에 저장된 타임 스탬프 + 고정 시간 간격 (n 일 + x 시간 + y 분 + z 초) + 소금입니다. 개인적이고 쉽게 만들고 확인하는 것이 좋습니다. –