2011-01-31 2 views
2

초급 질문입니다 ...PHP - 세션에 어떤 데이터를 포함시켜야합니까?

웹 사이트에서 어떤 유형의 데이터를 세션 내에 포함 시키거나 포함해서는 안되나요? 보안 유지가 필요한 정보는 포함해서는 안된다는 것을 이해합니다. 나는 베스트 프랙티스 프로그래밍에 더 많은 관심이있다. 예를 들어, 의존성 주입으로 페이지간에 보내지는 데이터를 세션에 포함시키는 것이 가능합니다. 전역 변수를 만드는 것과 관련이 없습니까?

일반적으로 말해서 세션 테이블에 어떤 데이터가 있거나 없습니까?

감사합니다,

JDelage

+0

질문이 너무 많아 "모범 사례"답변을 얻지 못하십니까? –

답변

1

세션을 1 회성으로 취급하고 많은 저장 공간을 읽어야합니다. 그러나 다소 휘발성 인 것 (예 : 모든 세션이 갑자기 사라지는 경우 기본 응용 프로그램 데이터의 상태가 일관성이 있어야합니다 (또는 복구 가능).

일부 예외가 있습니다. 일반적으로 장바구니는 세션에 저장되지만 재고 조정을 수행하여 결제 전에 항목을 '예약'할 수 있습니다. 여기에 항목이 추가/편집/여러 번 변경 될 수 있습니다 - 그래서 한번 쓰지는 않겠지 만 미리 재고 항목을 예약함으로써 데이터베이스의 복구 가능성을 유지할 수 있습니다. 그러나 이것의 의미는 주식 조정을 되돌려 야한다는 것입니다. 세션이 완료 될 때이 만료되면

개별 페이지 넘기기와 관련된 데이터에 대한 정보를 저장하기 시작하면 사용자가 앞으로/뒤로 버튼을 클릭하거나 새 창을 열면 문제가 발생하게됩니다.

7

요청 사이의 필요한 상태 정보를 유지하는 데 필요한 최소한의 정보.

+0

보통 UID, CSRF 용 해시, 보안 문자 값 등 +1 – RobertPitt

+0

@RobertPitt - CSRF는 무엇입니까? Thx – JDelage

+1

@JDelage 선호하는 검색 엔진에 CSRF를 입력하십시오. –

1

일반적으로 세션에 원하는 것을 넣을 수 있습니다. 페이지를 (기술적) 오류없이 실행하기 위해 존재해야하는 세션에 정보를 넣는 것은 나쁜 습관입니다.

가능한 한 세션의 데이터 양을 최소화하는 것이 좋습니다.

1

당신은 세션에서 저장할 수 있으므로 변경하지 않을 정보에 대해 다른 데이터베이스 쿼리를 작성하지 않아도됩니다. 계정의 사용자 이름, 주소, 전화 번호, 계정 잔액, 사이트의 보안 권한 등을 묻는 메시지가 표시됩니다.

1

(이것은 아마도 당신이 찾고있는 것 이상일 것입니다. 그러나 이미 좋은 답변을 추가하기위한 좋은 추가 정보가 필요할 수 있습니다. 게시 됨.)

모범 사례에 대해 언급 했으므로 세션 상태에 대한 아이디어를 좀 더 익히는 데 사용할 수있는 몇 가지 프로젝트/기술을 살펴볼 수 있습니다. 여러 서버에서 웹 응용 프로그램을 수평 적으로 확장하면 서버간에 세션 상태가 유지된다는 공통적 인 함정이 있습니다. (사용자 A는 사용자 세션을 저장하는 서버 A에 로그인하지만 다음 요청에서는 사용자 A 세션에 대해 알지 못하는 서버 B를 친다.)

나는 항상 나 자신에게 말하는 것을 끝내고있다. 그리고 동료들에게 그 자체로 세션은 본질적으로 데이터가 매우 일시적이더라도 데이터를 저장하는 최상의 장소가 아니라는 것입니다. 웹 서버는 데이터 저장소가 아닌 요청/응답 시스템입니다. 그것은 매우 전자에 조정되어 있지만, 항상 그렇게 큰 것은 아닙니다.

따라서 웹 서버와 다른 시스템에서 응용 프로그램의 세션 데이터 (또는 웹의 RESTful 무 상태 속성에서 실제로 최소한의 디자인으로 유지되어야하는 모든 상태 데이터)를 외부화하는 방법이 있습니다. Memcached은 이에 대한 매우 일반적인 도구입니다. SQL 또는 MySQL과 같은 데이터베이스에 세션을 저장하는 드롭 인 세션 대체 (또는 다양한 프레임 워크/환경에 대해 구성 가능한 세션 옵션)도 있습니다.

저는 최근에 세션 데이터 (No Transient Data)를 NoSQL 데이터베이스에 저장하는 방법을 모색 중입니다. CouchDBMongoDB은 현재 나의 가장 좋은 선택이지만 다른 옵션은 부족하지 않습니다. CouchDB는 뛰어난 수평 확장 성을 가지고 있습니다. MongoDB는 완전히 메모리가있는 상태에서 실행되는 경우 매우 빠릅니다.

적어도 이와 같은 주요 이점 중 하나는 배치가 쉽게 비 이벤트가 될 수 있다는 것입니다. 주어진 서버의 웹 서비스는 다시 시작될 수 있으며 내부의 응용 프로그램은 상태 저장 데이터를 손실하지 않고 다시 초기화됩니다.데이터가 디스크에 지속되면 (즉, 메모리 내에서 완전히 실행되지 않는 경우) 서버를 손실하지 않고 재부팅 할 수 있습니다. 서버/서비스는 팜 안팎으로 떨어질 수 있으며 사용자는 차이를 알 수 없습니다.

또한이 데이터를 외부화하면 잠재적으로 유용한 방식으로 데이터를 분석 할 수 있습니다. 쿼리, 메트릭 실행, 다른 웹 응용 프로그램 또는 전적으로 오프라인 도구를 통한 인터페이스 등. 프로젝트가 복잡해지면서 실제로 옵션이 열립니다.

(다시 말하지만이 질문은 실제로 귀하의 질문에 대답하려는 것이 아니라 유용하다고 생각되는 정보를 추가하는 것입니다. 그것은 제 동료들과 제가 늦게까지 수정 한 것입니다. 귀하의 질문은 좋은 것 같았습니다. 그 곳을 언급하십시오.)

+1

Re : 세션 저장 공간을 NoSQL으로 "실행할 때 완전히 메모리가있을 때", 세션 저장 경로를 램 디스크로 설정하지 않는 이유는 무엇입니까? 당신이 그것을 위해서만 사용한다면 중간에 전체 데이터베이스 서버를 버리지 마십시오. –

관련 문제