2008-08-21 5 views
8

웹 응용 프로그램을 만들 때 단일 사용자를 나타내는 User 객체가 있다고 가정 할 때 사용자가 로그인 한 것을 저장하는 가장 좋은 방법은 무엇이라고 생각합니까? 내가왔다에 대해 생각했습니다로그인 한 사용자 정보 저장

두 가지 방법 :

  • 저장된 세션 변수에 전체 사용자 개체를 저장 세션 변수
  • 의 사용자 데이터베이스 ID

더 좋은 제안 , 위의 방법을 사용하여 모든 문제? 아마도 보안 문제 또는 메모리 문제 등

답변

11

개체 대신 ID를 저장하는 것이 좋습니다. 단점은 당신이 그 사용자의 정보를 얻기를 원할 때마다 데이터베이스에 도달해야한다는 것입니다. 그러나 페이지에서 밀리 초가 지나면 성능에 문제가 없어야합니다. 다음과 같은 두 가지 이점이 있습니다.

  1. 사용자 정보가 어떻게 든 변경된 경우 세션에 오래된 정보가 저장되지 않습니다. 예를 들어, 관리자가 추가 권한을 부여받은 사용자는 로그 아웃 한 다음 다시 로그인 할 필요없이 즉시 사용할 수 있습니다.

  2. 세션 정보가 하드 드라이브에 저장되어있는 경우 직렬화 가능 데이터 만 저장할 수 있습니다. 따라서 User 객체가 데이터베이스 연결, 소켓, 파일 디스크립터 등을 포함하고 있다면 적절히 저장되지 않고 적절히 정리되지 않을 수도 있습니다.

대부분의 경우 이러한 우려는 문제가되지 않으며 두 가지 방법 모두 괜찮습니다.

2

세션에서 모든 사용자의 속성 (권한으로 확장)을 저장하면 다시 로그인 할 때까지 사용자에 대한 변경 사항이 적용되지 않습니다 .

개인적으로 빠른 참조를 위해 이름과 ID를 저장하고 필요할 때 나머지를 가져옵니다.

1

나는 그것이 당신이 사용하는 플랫폼에 달려 있다고 생각합니다. ASP.net을 사용하고 있다면, FormsAuthentication 클래스와 거기에 내장 된 (확장 가능) 모든 기능을 살펴보고 로그인 한 사용자 설정을 저장하는 데 사용할 수 있습니다.

1

대부분의 경우에 ID를 저장하는 것이 좋습니다. 하나의 중요한 이유는 확장 성 때문입니다. 사용자 객체 (또는 ID 대신 데이터베이스의 엔티티)를 저장하면 사이트를 제공하는 서버의 수를 늘리는 데 문제가 발생할 것입니다. 자세한 내용은 Google의 "shared nothing architecture"를 참조하십시오.

0

나는 일반적으로 세션에 사용자를 저장합니다. 변경할 수없는 로그인 문제는 변경 한 후에 세션의 객체를 새 사본으로 대체하여 해결할 수 있습니다.

0

사용자 객체는 상당히 가볍기 때문에 세션 변수에 저장했습니다. 그것이 가장 효율적인지는 모르지만 지금까지는 매우 잘 작동하고 있습니다.

6

보안을 위해 세션 ID를 세션 ID와 사용자 ID로 매핑하는 테이블을 생성했습니다 (GUID 또는 암호 학적으로 안전한 RNG).그런 다음 세션 ID를 쿠키에 저장하고 사용자 ID의 프록시 역할을합니다. 이에 |--------+-------|

|--------+-------|
|c64b2...+ 23456 |

|a1d4e...+ 12345 |
|Session |UserID |
|--------+-------|

그들의 ID를 추측하여 다른 사용자를 가장 할 수있는 하나. 또한 사용자의 세션을 제한하여 매번 로그인해야하는 경우가 많습니다 (보통 2 주). 세션에 대한 다른 데이터를 저장하려면이 테이블에 추가하면됩니다.

1

사용자 ID와 세션 ID의 해시 값을 저장 한 다음 데이터베이스의 세션 테이블에서이를 일치시킵니다. 그렇게하면 세션 데이터를 스푸핑하기가 더 어려워집니다. 여분의 수표로 IP를 확인해도 될까요?

세션 변수에 저장된 사용자 ID에 의존하고 싶고 그 사용자가 매우 쉽게 변경되어 다른 구성원으로 액세스 할 수 있다고 믿을 지 확신하지 못합니다.

관련 문제