문제

나는 단지 파악할 수 있는 실제로 저장소의 개체$_SESSION 나는 그것을 찾을 아주 멋진 때문에 나는 다른 페이지로 이동 나는 아직 내 개체입니다.지금 이 시작하기 전에 이 방법을 사용하고 싶은 찾을 경우 그것은 정말 좋은 생각이 있는 경우 또는 잠재적인 문제점 참여합니다.

내가 알고 있는 경우 나는 하나의 포인트의 항목을 필요는 없을 것이다 그렇지만 나는 아직 거기까지 하나의 포인트의 항목 및 내가 정말 좋아하기 때문에 객체지 않아요 내 주와 같습니다.(지금의 나는 또한 읽는 프로그램으로 무국적이지만 내가 이해하지 못하는 개념은 아직 없다.)

그래서 에서 짧은:그것은 확인 저장하는 개체 세션에서 어떤 문제가 있습니까?


편집:

임시 요약:지금 내가 있는 것을 이해하마 더 나은 다시 체도 포함하는 경우 쿼리 데이터베이스를 다시.

한 답변을 수 있는 어쩌면 에 정교한 측면 조금 더에!

도움이 되었습니까?

해결책

나는이 주제가 오래되었다는 것을 알고 있지만이 문제는 계속 나오고 내 만족을 다루지 않았습니다.

객체를 $ _session으로 저장하거나 숨겨진 형태의 필드에 숨겨진 데이터를 기반으로 전체 천을 재구성하든 매번 DB에서 다시 구입하든 상태를 사용하고 있습니다. HTTP는 상태가 없거나 (다소, get vs. put 참조) 웹 앱과 관련된 거의 모든 것이 상태를 어딘가에 유지해야합니다. 마치 국가를 구석 구석으로 밀고 어떤 종류의 이론적 승리에 해당하는 것처럼 행동하는 것은 잘못된 일입니다. 상태는 상태입니다. 상태를 사용하는 경우 무국적으로 얻은 다양한 기술적 이점을 잃게됩니다. 미리 잠을 잃어야한다는 것을 미리 알지 않는 한 이것은 잠을 잃을 것이 아닙니다.

나는 Hank Gay가 제시 한 "이중 whammy"주장에 의해받은 축복에 특히 Flummox에 휩싸입니다. OP 빌딩은 분산 및로드 균형 전자 상거래 시스템입니까? 내 추측은 아니오입니다. 그리고 나는 그의 $ 사용자 클래스를 연속화하는 것이 그의 서버를 수리 할 수없는 것을 무너 뜨리지 않을 것이라고 더 자세히 설명 할 것입니다. 내 조언 : 응용 프로그램에 합리적인 기술을 사용하십시오. $ _session의 객체는 상식 예방 조치에 따라 괜찮습니다. 앱이 갑자기 트래픽에서 아마존과 경쟁하는 무언가로 바뀌면 다시 적응해야합니다. 인생이 다 그렇지.

다른 팁

Session_start () 호출이 이루어질 때까지, 클래스 선언/정의는 이미 PHP에 의해 발생했거나 이미 설치된 자동 로더에서 찾을 수 있습니다. 그렇지 않으면 세션 스토어에서 객체를 사로화 할 수 없습니다.

HTTP 는 무국적자에 대한 프로토콜을 이유입니다.세션 용접 상태에 HTTP.엄지 손가락의 규칙으로 사용하지 마십시오 세션 상태입니다.

업데이트:의 개념이 없 세션 HTTP 수준에서;서버는 이를 제공하여 클라이언트는 고유 ID 를 말하는 클라이언트시 제출하시기 바랍니다에 모든 요청을 합니다.그때 서버가 사용하는 ID 를 키로 해시 테이블의 세션을 개체입니다.할 때마다 서버가 요청을 보이는 세션 정보는 그것의 해시 테이블의 개체 세션에 따라 ID 를 클라이언트와 함께 제출 요청을 합니다.이 모든 추가 작업이 이중고에 확장성(큰 이유 HTTP 상태가 저장).

  • Whammy 하나:그의 작업 부담이 줄어듭 단일 서버에 할 수 있습니다.
  • Whammy 두:어렵게 만드는 규모이기 때문에 이제할 수 없는 경로를 요청을 어떤 이전 서버-그들은하지 않는 모두 동일한 세션이 있습니다.고정할 수 있습니다 모든 요청에 지정한 세션으로 ID 와 같은 서버에 있습니다.는 쉬운 일이 아닙니다,그리고 실패의 단일 지점(지 시스템에 대한 전체적으로,하지만 큰 덩어리의 사용자)가 있습니다.또는,당신은 당신을 공유할 수 있는 세션 저장소에서 모든 서버에 클러스터는,하지만 지금은 더 복잡:네트워크에 연결된 메모리,독립 세션 server,etc.

주어진 모든 것을 자세한 정보를 넣어 세션에서 더 큰 성능에 미치는 영향(로 Vinko 포인트).또한 Vinko 지는 경우,귀하의 개체 없는 직렬화 세션이 올바르게 작동하지 않습니다.그래서 엄지손가락의 규칙으로,두지 않는 방식보다 더 많이 절대적으로 필요합니다.

@Vinko 할 수 있습니다 일반적으로 작업을 서버에 저장 상태를 포함하여 데이터를 추적하에서 응답을 다시 보내는 클라이언트시 제출하시기 바랍니다,예를들면,전송 데이터의 아래에 숨겨진 입력합니다.는 경우 필요 서버 측의 추적 상태,그것은 아마도 당신의 백업 데이터 저장소.

(Vinko 를 추가합니다:PHP 할 수 있는 데이터베이스를 사용하여 저장을 위한 세션 정보는 클라이언트를 다시 전송 데이터를 각각의 시간을 해결할 수 있습 잠재적 확장성 문제이지만,엽 큰 수 있습의 보안 문제에 관심을 지불 해야 합니다 이제는 클라이언트의 통제에서의 모든 주)

  • 직렬화 할 수없는 객체 (또는 비 제시 불가능한 구성원이 포함 된)는 예상대로 $ _session에서 나오지 않습니다.
  • 거대한 세션은 서버에 부담 을가집니다 (매번 스테이트의 직렬화 및 사막화가 비싸다)

그 외에는 아무런 문제가 없었습니다.

내 경험상, 일반적으로 일부 속성이있는 stdclass보다 더 복잡한 것은 가치가 없습니다. 비 제외 비용은 항상 세션 저장된 식별자가 주어진 데이터베이스에서 재현하는 것 이상이었습니다. 시원해 보이지만 (항상 그렇듯이) 프로파일 링이 핵심입니다.

는 것이 좋지 않을 사용하지 않는 한 당신이 절대적으로 필요합니다.할 수 있는 경우 다시체를 사용하지 않고 세션이 않습니다.데국에서용 프로그램은 더 복잡한 응용 프로그램을 구축을 위한 모든 요청을 볼 수 있는 상태를 사용자가입니다.당연히 거기에 시간을 피할 수 없을 사용하여 세션(예를 들어:사용자가 보관해야 로그인 동안 세션에그램).마지막이 유지하는 세션 객체를 가능한 한 작은 그것이 성능에 미치는 직렬화하고 unserialize 합니다.

리소스 유형 (예 : DB 연결 또는 파일 포인터)은 페이지로드 사이에 지속되지 않으며이를 눈에 보이지 않게 다시 만들어야한다는 것을 기억해야합니다.

또한 세션의 크기를 고려하십시오. 저장 방법에 따라 크기 제한 또는 대기 시간 문제가있을 수 있습니다.

또한 소프트웨어 라이브러리를 업그레이드 할 때 가져올 것입니다. 소프트웨어를 업그레이드했으며 이전 버전은 V1 소프트웨어의 클래스 이름과 함께 객체를 가졌으며, 세션에 있던 객체를 구축하려고 시도 할 때 새로운 소프트웨어가 충돌했습니다. 소프트웨어는 더 이상 같은 클래스를 사용하지 않았으며 찾을 수 없었습니다. 세션 객체를 감지하기 위해 수정 코드를 넣고 찾은 경우 세션을 삭제하고 페이지를 다시로드해야했습니다. 가장 큰 고통은 처음 에이 버그가 처음보고되었을 때이 버그를 재현하고 있다고 생각합니다 (너무 친숙합니다. 우리는 모든 사용자가 세션에 기존 세션 변수를 가지고 있었고 잠재적으로 모든 사람에게 충돌했을 것이기 때문에 우리가 출시되기 전에 그것을 찾았습니다. :)

어쨌든, 당신이 수정안에서 제안한 것처럼, 나는 또한 대상을 다시 만드는 것이 더 낫다고 생각합니다. 따라서 ID를 저장 한 다음 각 요청에서 데이터베이스에서 객체를 가져 오는 것이 더 좋습니다.

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