2010-08-21 6 views
3

세션 처리 방법에 관해서는 약간의 의문이 있습니다.PHP 세션 ID, 쿠키 + 데이터베이스로 사용자 추적하기

지금은 "users"테이블에 session_id 필드가있는 MySQL 데이터베이스가 있습니다. NULL이면 사용자가 로그인하지 않았습니까? 값이 PHPSESSID 쿠키의 값과 같으면 사용자가 로그인 한 것입니다.

이유는 모르지만 어쨌든 이것이 어떤 사용자인지 확인하는 데는 불만이 있습니다. 난 상대하고있어. 내가 누락 된 것이 있거나 내 두려움이 아무 근거도 갖고 있지 않습니까?

답변

2

내가 볼 수있는 한 설명하는 내용이 본질적으로 잘못되었습니다.

물론 로그인 및 로그 아웃 메커니즘은 로그인하거나 로그 아웃 할 때 사용자 ID를 안정적으로 추가하고 제거해야합니다. (암호가 일치 할 때만 사용자 이름 삽입). 또한 만료 된 세션을 안정적으로 제거해야합니다. 그것이 주어지면, 이것은 괜찮을 것입니다.

+0

예, 로그 아웃에는 세션 쿠키가 삭제되고 세션 필드가 NULL로 설정되고 서버 측 세션이 삭제됩니다. – KdgDev

2

Pekka가 말한 것을 확장하면 Pekka가 만료 된 세션에 대해 언급 했으므로 데이터베이스에 사라짐을 알리지 않기 때문에 테이블에 '마지막으로 본'필드를 포함시켜 판사로 사용할 수 있습니다. . 따라서 사용자가 마지막으로 수동으로 그 사람이 있었는지 또는 그 라인을 따라 무엇인가를 수동으로 확인한 후 세션 시간 초과 (PHP가 기본적으로 15-30 분이라고 생각하는)로 다시 매핑하도록 강제 할 것입니다. 그런 다음 해당 시간이 지난 후에 마지막 X 분 내에 활성화되지 않은 사용자를 지우십시오.

1

위의 옵션을 생각해보십시오. 사용자 테이블에서 사용자를 추적하면 사용자 당 1 회의 세션 만 허용됩니다. 세션이라는 테이블에 데이터를 저장하고 다음 열을 사용하는 것이 좋습니다.

sess_id | sess_userid | sess_ipv4 | sess_lastseen (datetime/timestamp) | sess_sessionid (varchar)

다른 공개 ID를 공유하더라도 사용자가 여러 로그인을 할 수 있다고 믿지만 랩톱, 태블릿, 휴대 전화 등을 허용합니다. 이렇게하면 각 기기를 추적 할 수 있습니다. 단일 사용자와는 별도로

희망이 도움이됩니다.

지난 주에 읽은 게시물은 이전 세션 및 currsession을 가지고 있고 u가 올바른 사용자에게 새 세션 (매 15 분마다?)을 할당하고 있음을 제안했습니다. . 세션을 이전 세션에서 새 세션으로 바꾸고 이전 세션을 확인으로 저장합니다. 이것이 도움이 될지 확신하지는 못했지만 ID가이를 언급했다고 생각했습니다.