문제

ASP.NET에서 어떤 사용자가 서버의 어떤 세션 변수와 연관되어 있는지 혼동하는 것이 가능합니까?세션 변수는 시간, 공간 및 차원에 걸쳐 해당 변수를 생성한 원래 사용자와 불변적으로 연결되어 있습니까?

도움이 되었습니까?

해결책

원래 질문에 답하려면:세션은 쿠키에 있는 ID에 맞춰져 있습니다.이 ID는 임의의 숫자 암호화 루틴을 사용하여 생성됩니다.고유하다고 보장할 수는 없지만 세션 수명 동안 중복될 가능성은 거의 없습니다.세션이 전체 근무일 동안 실행되더라도 마찬가지입니다.정말 인기 있는 사이트에서 중복 키를 생성하는 데에도 아마 몇 년이 걸릴 것입니다(이를 뒷받침할 통계나 사실이 없음).

세션 값이 뒤섞이는 데 문제가 있는 것 같지는 않습니다.가장 먼저 살펴보기 시작할 것은 연결 풀링입니다.ADO는 기본적으로 연결을 풀하지만 풀에 없는 사용자 이름/비밀번호로 연결을 요청하면 새 연결이 제공됩니다.사이트 규모가 매우 큰 경우 향후 성능 병목 현상이 발생할 수 있다는 점을 힌트로 삼으세요.SQL Server로 작업한 지 꽤 되었는데, Oracle에서는 사용자 ID를 전환할 수 있는 호출이 있습니다.SQL Server에 이에 상응하는 기능이 없다면 놀랄 것입니다.일반 사용자 이름/비밀번호를 사용하여 DB에 연결한 다음 나머지 코드에 연결을 되돌리기 전에 해당 ID 전환 호출을 실행할 수 있습니다.

다른 팁

세션 공급자에 따라 다르며 더 이상 고유하지 않은 방식으로 세션 키 생성을 재정의한 경우 여러 사용자가 동일한 세션에 액세스할 수 있습니다.

어떤 행동이 보이나요?그리고 당신이 말하는 변수에 정적 요소가 없다고 확신합니까?

무엇이든 가능한 동안....

아니요, 세션 상태를 SQL Server나 기타 프로세스 저장소 외부에 저장한 다음 조작하지 않는 한은 그렇습니다...

세션은 사용자 쿠키에 바인딩되어 있으며 일반적인 시나리오에서 문제가 발생할 가능성은 거의 없지만 분산 세션 상태를 사용하는 경우 문제가 발생할 수 있습니다.

그것은 불가능합니다.세션은 작성자와 연결되어 있습니다.

엇갈리고 싶나요, 아니면 엇갈린 것처럼 보이는 경우가 있나요?

추가 정보:

로그인 페이지에서 사용자 ID/비밀번호를 가져와 세션 변수에 저장하는 앱이 있습니다.SQL Server를 호출하기 위해 이를 연결 문자열에 넣습니다.

테이블이 업데이트되면 데이터베이스의 'system_user'를 사용하여 '마지막 업데이트자' 사용자를 식별합니다.우리가 나열할 것으로 기대하는 사용자가 올바르지 않고 다른 사람에게 표시되는 이상한 동작을 확인했습니다.

디버거를 실행하여 실제로 해당 연결 문자열에 올바른 값이 전달되는지 확인할 수 있습니까?문제가 어느 쪽에 있는지 빠르게 식별하는 데 도움이 됩니다.

또한 연결 코드에 연결 또는 사용자에 대한 정적 속성이 없는지 확인하십시오. 그렇지 않으면 업데이트가 시작되기 전에 한 사용자의 연결이 가장 최근 사용자의 연결로 대체될 수 있습니다.

내 생각엔 연결 문자열을 보유하기 위해 클래스의 정적 필드를 다시 사용하고 있는 것 같습니다.이러한 정적 필드는 여러 IIS 요청에서 재사용되므로 '마지막 업데이트자'에는 가장 최근에 로그인한 사용자만 표시될 것입니다.

그런데, 정말 타당한 이유가 없다면 이렇게 DB에 연결하면 안 됩니다.높은 부하에서 성능을 저하시키는 연결 풀링을 사용하지 못하게 됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top