사용자 도구

사이트 도구


woocommerce:start

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판이전 판
다음 판
이전 판
woocommerce:start [2015/12/15 07:16] – 세션에 대한 분석 changwoowoocommerce:start [2015/12/15 07:53] (현재) – [카트 (장바구니)에 대한 분석] changwoo
줄 16: 줄 16:
  
 ====== 세션에 대한 분석 ====== ====== 세션에 대한 분석 ======
 +===== 서버 측 세션 =====
 +세션은 현재 로그인한 사용자가 로그인한 동안 가지게 되는 여러 상태에 대해 저장을 하는 값의 집합이다. 사용자가 로그아웃을 하면 세션 값은 파기되고, 다시 로그인을 하면 생성되는 구조로 되어 있다.
 +
 +우커머스의 세션정보는 ''options'' 테이블에 일괄적으로 저장된다. 키의 이름은 ''_wc_session_{$user_id}'' 구조로 되어 있으니, 유저 아이디를 알면 해당 값을 데이터베이스에서 직접 추척할 수도 있다.
 +
 +세션은 임시적인 값이므로 만기일이 지정되어 있다. 우커머스는 기본으로 세션을 만들게 되면 48시간 후에 만료되게 되어 있고 47시간 후에는 업데이트를 해야 함을 알리도록 디자인되어있다. 아래 코드는 ''includes/class-wc-session-handler.php'' 파일의 ''WC_Session_Handler::set_session_expiration()'' 메소드의 구현 부분이다.
 +
 +<code php>
 +public function set_session_expiration() {
 + $this->_session_expiring    = time() + intval( apply_filters( 'wc_session_expiring', 60 * 60 * 47 ) ); // 47 Hours
 + $this->_session_expiration  = time() + intval( apply_filters( 'wc_session_expiration', 60 * 60 * 48 ) ); // 48 Hours
 +}
 +</code>
 +
 +우커머스는 sesion_expiring 부분이 현재 시간 보다 이전이면 세션을 다시 업데이트하도록 처리했다. 이것은 ''WC_Session_Handler::__construct()''를 참고하면 된다.
 +
 +이 세션 만기 값은 ''options''에 별도로 저장된다. ''_wc_session_expires_{$user_id}'' 키로 저장되어 있으며, 값은 타임스탬프이다.
 +
 +===== 클라이언트 측 세션 =====
 +클라이언트 측에서 세션에 대한 정보는 쿠키에서 관리한다. 우커머스에서 사용하는 세션에 대한 쿠키의 식별자는 ''wp_woocommerce_session_{COOKIEHASH}''이다. COOKIEHASH 값은 ''wordpress/wp-includes/default-constants.php'' ''wp_cookie_constants()'' 함수에서 관리된다. 여러 워드프레스 인스턴스 중에서 해당 사이트의 워드프레스를 인지할 때 사용할 수 있는 식별값이다. siteurl 정보를 md5 해시화하여 가지고 있다.
 +
 +쿠키의 값은 4개의 필드를 가지며 '||' 문자를 통해 구분된다. 각각 아래와 같다.
 +
 +  - 해당 사이트의 유저 아이디
 +  - 세션 만기 직전 값 (47시간 짜리)
 +  - 세션 만기 값 (48시간 짜리)
 +  - 쿠키의 내용의 해시 (salt + md5). 내용이 변조되지 않았는지를 체크한다.
  
 ====== 카트 (장바구니)에 대한 분석 ====== ====== 카트 (장바구니)에 대한 분석 ======
 +장바구니는 우선 사용자가 로그인되어 있을 경우 세션 정보로부터 읽어들인다. 그리고 해당 값은 별도의 user_meta 테이블에도 따로 기록된다. 세션 정보는 쿠폰 적용 등 사용자가 정말 마지막까지 운용중이었던 작업까지 기억하는 반면, user_meta 테이블에 별도로 저장되는 장바구니 정보에는 그러한 세세한 정보는 생략된다.
 +
 +세션 정보가 아닌 user_meta 테이블에 저장되는 값은 다음과 같은 구조를 가지고 있다.
 +
 +  * 키: _woocommerce_persistent_cart
 +  * 값: 시리얼라이즈 된 값. 키의 종류는 ''WC_Cart::$cart_session_data'' 멤버 변수를 참조하면 된다. 물론 이것이 전부라고는 단정할 수 없다. 현재 카트 정보는 'cart'라는 키의 값으로 저장된다. 각 항목은 카트의 정보에 따라 해시 값 => 실제 변수들 식으로 구성되어 있다.
  
 +아래는 한 예이다.
 +<code php>
 +array(
 +    'cart' => array(
 +        '9bf31c7ff062936a96d3c8bd1f8f2ff3' => array( ... ),
 +        '6f4922f45568161a8cdf4ad2299f6d23' => array( ... ),
 +    ),
 +);
 +</code>
  
  
woocommerce/start.1450163814.txt.gz · 마지막으로 수정됨: 2015/12/15 07:16 저자 changwoo

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki