2010-07-27 5 views
1

설정 : 템플릿에서 구운 오는 전형적인 로그온/로그 오프 물건MVC2 및 세션 시작 이벤트

계정 컨트롤러. 로그온 페이지에서별로 수정하지 않습니다. 커스텀 멤버십 공급자 (SQL)를 사용하고 있지만, 여기서 내가하려고하는 일에 영향을 미치지 않는다고 생각합니다.

요구 사항 :

클라이언트는 전체 사용자가 동시 사용자 및하지를 제한하여 라이선스를 처리하고자합니다. 그래서,이 post here을 참조한 후에, 나는이 일을 내가해야 할 일에 착수했다. 이는 우리 애플리케이션에 등록한 각 조직의 최대 및 현재 사용자를 추적하는 것입니다. 문제는 없습니다. 키가 조직 ID이고 조직의 현재 또는 최대 사용자 인 값인 해시 테이블 인 응용 프로그램 ("최대")과 응용 프로그램 ("현재") 만 있으면됩니다. Session_Start에서 현재 사용자 수를 늘리고 최대 값을 초과하는지 확인하고 a) 오류 페이지로 리디렉션하거나 b) 필요한 작업을 계속하도록합니다. Session_End에서 카운트를 감소시킵니다.

문제점 :

formsService.signIn를 사용하여, 실제로 세션에서 무엇을 저장됩니까? 세션 ID를 제외하고는 session_start에서 내 세션에 대한 정보를 수집 할 수 없습니다. 따라서 사용자 추적을위한 정확한 숫자를 늘릴 수는 없습니다. 세션을 시작하기 전에 session_start가 이미 시작되었으므로 세션에 변수를 추가 할 수 없습니다.

+0

IMO, 웹 사이트의 동시 사용자를 찾는 것은 거의 불가능합니다. 페이지가로드되면 웹 서버는 사용자가 아직 웹 사이트에 있는지 알 수 없습니다. – ZippyV

+0

알다시피, 나는 그 사고 방식에 대해서도 잘 견해를 가지고있다. (정확한 카운트를 확신 할 수없고, 계정이 있어도 PPP가 일을하지 못하게 할 수있다.)하지만 하루가 끝날 때, 나는 내 자신의 청구서를 지불하지 않습니다 :/ – Tommy

답변

1

세션이 인증과 어떻게 든 연결된다는 개념은 신화입니다. 그것들은 전적으로 서로 독립적입니다. 세션 키를 공유하는 경우 여러 사용자가 세션을 공유 할 수도 있습니다. 그렇기 때문에 보안 관련 정보를 절대로 세션에 넣지 않습니다. 세션도 로그인하는 동안 만료 될 수 있습니다. 마찬가지로 세션을 명시 적으로 포기하지 않는 한 세션은 로그 아웃 한 후에도 계속 활성화됩니다.

세션은 사용자 별 캐시와 유사합니다.

그래서이 사실을 받아 들여 적응시켜야합니다. 세션 시작시 현재 사용자가 인증되었는지 확인하고 확인하십시오. 세션이 이미 시작되었으므로 로그온하는 동안 증가시켜야합니다. 기타

+0

그래, 그냥 알아 냈어. DB에 '임시'테이블을 유지하여 각 조직의 현재 및 최대를 추적하고 저장소 내의 로그인/로그 아웃 작업에 증가/감소를 연결했습니다. 이러한 작업에서 바로 내 수표를 할 수 있으며 세션의 모든 재미있는 영향을 걱정할 필요가 없습니다. 나는 항상 당신이 로그인했을 때, 당신이 누구인지 말해주는 세션을 가지고 있다고 생각했습니다. 매일 무언가를 배우지 않으면 내 일을하지 않을거야! 고마워. – Tommy