2011-07-26 6 views
1

나는이 주제에 대해 상충되는 정보를 읽었으므로 나는 내가 제시 한 시나리오로 한 계획이 다른 계획보다 더 이상적 일 것이라고 기대한다.PHP 세션 대 DB 조회

내 경우에는 "섹션"으로 구성된 "그룹"에 대한 액세스 권한이있는 "사용자"가 있습니다. 각 섹션은 사용자 구성 방법에 따라 다른 권한 수준을 가질 수 있습니다. 그래서 저는 동료가 "기본"인 동안 섹션의 "관리자"가 될 수 있습니다.

로그인 한 후 사용자는 관리 /보고하려는 그룹을 선택합니다. 내 원래 계획은이 페이지에 갈 때 그리고, 나는 그들이있어 어떤 그룹을 찾아 볼 수 ...

$_SESSION[group_id][sectioin_id]['permission'] = 7; // 1+2+4 (R+W+X) 

를 같은 세션에서 배열의 사용자/그룹/절/permisison 정보와 저장소를 조회하는 것이 었습니다 in 섹션에서 어떤 섹션 페이지가 표시되는지 확인하고 해당 권한을 기반으로 적절한 정보를 표시하십시오.

또는 DB 조회 스크립트를 작성하여이 정보를 확인할 수도 있지만 여러 조인 된 테이블에서 조회해야하며 각 페이지에 대한 결과를 구문 분석해야합니다. 이것은 나에게 비효율적 인 것처럼 보이지만, 각 페이지에 대해 세션이 어떻게 쓰여지는지에 관해 내가 읽었던 것에서 볼 때 그렇지 않을 수도 있습니다.

아이디어/제안 주셔서 감사합니다.

// ----

가능한 세션 크기

에 대한 추가 정보는 지금 그룹은 데이터를 최대 3 개 5 개 섹션의 최대있다. 이 섹션의 1,3,4 유료 수준에와 2,5는 무료 버전에있는 경우 것

$_SESSION[1][1]['permission'] = 7; 
$_SESSION[1][1]['type'] = 'paid'; 
$_SESSION[1][1]['expires'] = '2011-08-01'; 
$_SESSION[1][2]['permission'] = 7; 
$_SESSION[1][2]['type'] = 'free'; 
$_SESSION[1][3]['permission'] = 7; 
$_SESSION[1][3]['type'] = 'paid'; 
$_SESSION[1][3]['expires'] = '2011-08-01'; 
$_SESSION[1][4]['permission'] = 7; 
$_SESSION[1][4]['type'] = 'paid'; 
$_SESSION[1][4]['expires'] = '2011-08-01'; 
$_SESSION[1][5]['permission'] = 7; 
$_SESSION[1][5]['type'] = 'free'; 

: 세션의 최대 크기는 현재 뭔가처럼 될 것입니다. 로그인 당 추적 할 세션 항목이 너무 많습니까?

+7

7 == 1 + 2 + 3 ??;) – PeeHaa

+1

고려해야 할 한 가지. 사용 권한이 세션에 저장되어 있으면 사용 권한 변경 내용이 즉시 적용되지 않습니다. 사용자는 새로운 허가를 얻으려면 '로그 아웃'하고 다시 로그인해야합니다. –

+0

@PeeHaa : 7은 111 바이너리 (R 비트, W 비트, X 비트) – reinierpost

답변

0

저는 이것을 꽤 못생긴 해킹이라고 부릅니다. 당신이하려고하는 것은 커다란 객체를 만들고 PHP 인터프리터를 여러 번 실행하는 것입니다. 개체를 세션 데이터에 몰래 넣는 것은 영리하지만 잘못된 방법입니다.

새로운 사용자 세션마다 전체 사용 권한 테이블 집합을 저장하고 동일한 데이터를 반복해서 복제한다는 점에 유의하십시오.

IMO 당신은 로그인 타임에 값 비싼 조회 수를 가져 가야합니다. (어쨌든 다른 일을 할 필요가 없을 것입니다) $ _SESSION [ "permission"] = 7과 같이 세션에서 사용자의 허가 마스크를 유지해야합니다

여러 상호 작용을 통해 사용 권한 공급자를 저장하려면 개체 직렬화를 조사하십시오. $ _SESSION을 악용하지 않고도 데이터베이스에 객체를 저장할 수 있습니다.

+0

그래서 내가 올바르게 따라갈 경우 특정 "섹션"레벨에 대한 권한을로드하는 것과 사용자가 다른 섹션으로 전환 할 때만로드하는 것이 좋습니다 또는 그룹을 누른 다음 DB를 눌러 새 권한 수준으로로드 하시겠습니까? – Don

+0

@Don 오, 이제 당신이하려는 것을 봅니다. 나는 당신이 $ _SESSION에 전체 권한 테이블을 저장할 때마다 데이터베이스에서 매번 찾아 볼 필요가 없지만 여러 페이지에 걸쳐 해당 사용자의 권한 만 저장하고 있다고 생각합니다. 내가 가능한 모든 그룹/섹션 조합에 대한 대규모 배열을 가지고 주저하고 싶습니다. 어쩌면 기본 사용자 수준을 가지고 있으며 표준에서 벗어난 경우에만 사용 권한을 저장할 수 있습니까? –

+0

예, 전체 사이트가 아니라 사용자의 액세스입니다. 대부분 그룹 레벨을 저장하기 때문에 그룹은 5 개의 섹션으로 구성됩니다. 각 섹션은 섹션이 "유료"또는 "무료"레벨 및 선택적으로 만료 날짜에서 실행되는지 여부에 관계없이 사용 권한 레벨을 저장하므로 최대 5x3 레벨의 깊이가 될 수 있습니다. – Don

0

어느 쪽이든 작동 할 것입니다. 주의 사항 :

  • 시스템에 얼마나 민감합니까? 세션 접근 방식으로 이동하여 사용자가 사용 중지되거나 사용 권한이 삭제되면 다음 로그인까지 계속 액세스 할 수 있습니다.
  • 세션 데이터의 크기는 제한되어야합니다. 백만 개의 그룹/섹션/권한이있는 경우 세션 데이터가 상당히 크고 처리 속도가 느립니다.
+0

새 사용자를 추가 할 때 계정 설정이 필요합니다. 내 동생을 그룹과 섹션에 추가하면 그의 액세스 권한을 지정합니다. 나는 네가하는 말을 보았다. 그가 로그인하는 동안 자신의 권한을 낮은 수준으로 떨어 뜨리면 다음 로그인까지 높은 수준에 머물러있게됩니다 ... 세션이 생성 된 시간과 설정된 간격 강제보다 오래되면 타임 스탬프를 추가 할 수 있습니다 다시로드 할 수도 있지만 추한 것의 위에는 추한 것일 수도 있습니다 ... – Don