HTTP 세션 또는 데이터베이스 접근


16

내 접근 방식이 무엇인지 혼란 스럽습니다. 쇼핑 카트 디자인 작업 중이며 세션 또는 데이터베이스에 쇼핑 카트를 저장해야하지만 어느 접근 방식이 가장 좋은지 잘 모르겠습니다. 사용 사례는 다음과 같습니다.

  1. 사용자가 로그인하지 않고 장바구니에 제품 추가 (익명 사용자)
  2. 사용자가 로그인하여 장바구니에 제품을 추가 중입니다.

사용자가 웹 상점을 방문하고 로그인하지 않고 제품을 추가하는 경우가 많으며 체크 아웃 프로세스를 수행하지 않을 가능성이 많기 때문에 첫 번째 경우는 더 혼란 스럽습니다.

그러나 여전히 쇼핑 카트를 생성하고 저장하기 위해이 사용자를 위해 쇼핑 카트를 만들어야합니다. 쇼핑 카트를 저장하려면 두 가지 옵션이 있습니다.

  1. 사용자가 제품을 추가 할 때 데이터베이스에서 카트를 작성하고이 카트를이 사용자와 연관 시키십시오. 로그인 한 순간이 카트를 로그인 한 사용자로 이동하십시오.
  2. 사용자가 로그인하여 데이터베이스에 장바구니를 작성하고 사용자와이 장바구니에 로그인 한 사용자를 연관 시키면 장바구니를 작성하고 제품을 추가 한 후 세션에 저장하십시오.

데이터베이스 기반 카트 시스템과 세션 기반 둘 다 긍정적 인 측면뿐만 아니라 긍정적 인 측면을 가질 수 있지만 다음 사항을 고려할 때 가장 적합한 방법은 무엇인지 확실하지 않습니다.

  1. 확장 성
  2. 적응성
  3. 확장 성
  4. 응용 프로그램 속도를 관리해야

경로를 결정하기 위해이 측면에서 입력을 찾습니다.


2
왜? 수백 개의 전자 상거래 웹 사이트를 운영하고 있으며 쿠키 나 localStorage (HTML5)에 모든 것을 저장합니다. 또한 세션은 메모리를 사용합니다. 계정 로그인을 할 때 타임 스탬프와 함께 암호화 된 쿠키를 사용합니다. 페이지가로드 될 때 HTML5 기술을 사용하여 단일로드 후 sessionStorage를 저장하고 사용하므로 세션이 필요하지 않습니다. IE8 + 호환 표준 웹 기술입니다.
Jason Sebring

@LuiggiMendoza 그래 왜 안돼?
Jason Sebring

@ zipstory.com : HTML5 기반 솔루션에 대해서도 살펴보고 싶지만 브라우저가 거의 지원하지 않기 때문에 조금 의심 스럽습니다
Umesh Awasthi

@ UmeshAwasthi 나는 내 고객이 하위 브라우저의 소수의 사람들을 신경 쓰지 않는다고 생각하지만 웹 트래픽에서 다른 경우에는 이것이 나쁜 접근 방법입니다. 나는 여전히 많은 세계가 IE7에서 XP를 사용하고 때로는 IE6에서 사용한다는 것을 알고 있지만 내 클라이언트 제품 중 일부는 Nordstroms 및 Macy 등과 같은 매장에서 발견되며 걱정하지 않는 것 같습니다.
Jason Sebring

@ zipstory.com : 나는 클라이언트가 IE6 심지어 지원을하고자하는 전자 상거래 응용 프로그램과 함께하고 있어요 지금은 :)이 있습니다 ABT 무엇을 말할 것이다
Umesh Awasthi

답변:


9

모든 방문자가 사이트를 처음 방문했을 때 고유 ID가 할당되는 솔루션을 사용하려고합니다. 익명인지 인증 된 것인지는 중요하지 않습니다. 익명 사용자가 등록 할 때 고유 ID를 유지하십시오.

장바구니를 데이터베이스에 저장하십시오. 스토리지는 저렴하며, 때때로 카트에 대한 쿼리를 수행하는 것이 성능 측면에서 문제가되지는 않습니다.


장바구니 세부 사항 페이지를 표시해야하는 경우는 어떻습니까? 세션에서 데이터를 저장 / 가져 오거나 데이터베이스 적중에 가야합니까?
Umesh Awasthi

카트 세부 사항을 데이터베이스에 저장하면 데이터베이스에 충돌해야합니다.
Jakob Gade

7

두 방법 모두 장단점이 있지만 데이터베이스 스토리지에는 두 가지 장점이 있습니다.

  1. 보고. 데이터가 세션에있는 경우 버려진 장바구니, 전환율 등을보고 할 수 없습니다.
  2. 세션 시간 초과 저녁을 먹으러 가서 세션이 만료되어 카트가 비 었음을 발견하기 위해 돌아 왔을 때 나는 화가났다. 소매점도 그 점을 좋아하지 않을 것이라고 생각합니다. 우리는 포기하고 떠나는 것이 아니라 구매에 대해 사용자를 자극하고 싶습니다.

6

문제는 내 고객 시장에서 필요하지 않은 세션이 필요하다고 가정합니다. 수백 개의 전자 상거래 웹 사이트를 운영하고 있으며 이들 중 소수는 많은 트래픽을 받고 있습니다. 우리는 농장이 확장되지 않으면 세션이 느려지거나 더 많은 설정이 필요하지 않은 한 세션을 사용하지 않습니다. 세션이 메모리를 사용하고 세션 상태의 데이터베이스 페치가 매우 느리고 더 많은 부분이 필요합니다.

대신 HTML5 sessionStorage를 사용하여 반복해서 가져와야하는 모든 사용자 정보를 유지하지만 대역폭을 높이기 위해 매번 쿠키 순환을하지 않아도됩니다. 이것은 IE8 +이며 다른 모든 최신 브라우저 및 모바일 장치는이 기술과 호환됩니다. 그러나 이전에 한 것처럼 카트에 쿠키를 쉽게 넣을 수 있습니다. 좋은 쿠키 카트는 다음과 같습니다. http://simplecartjs.org/

사용자가 로그인하거나 로그인 할 때 타임 스탬프가 구운 암호화 된 쿠키를 사용합니다.

또한 리소스를 프리 페치하고 카탈로그 데이터를 가져올 수 있으므로 사용자 트래픽이 초고속 웹 사이트가되고 모바일도 오프라인 (마이너스 트랜잭션)으로 작동 할 수 있으므로 ApplicationCache를 사용하여 웹 트래픽을 추가로 줄일 수 있습니다. 물론 제품 등이 변경 될 때 매니페스트를 업데이트해야합니다.


4

세션 스토리지 및 데이터베이스 스토리지가 독점적이라고 가정합니다. 그렇지 않습니다. 그러나 그들이 있다고 가정하여 시작합시다.

세션 스토리지의 장점은 세 가지입니다.

  1. 데이터베이스에 데이터를 명시 적으로 삽입 할 필요가 없습니다. 세션 변수를 설정하기 만하면됩니다. 기능적으로 간단하고 위험이 적습니다.
  2. 컨테이너 / 프레임 워크를 통해 사용자 방문 및 장바구니 수명주기를 관리 할 필요가 없습니다.
  3. 일반적으로 오래된 유휴 세션의 자동 정리가 수행됩니다.

세션 저장의 단점 :

  1. 복제를 조사하지 않는 한 세션 선호도
  2. 디스크에 대한 세션 상태의 복제 또는 수동 지속성을 조사하지 않으면 장애 조치가 발생하지 않아 복잡해질 수 있습니다.
  3. 모든 세션은 메모리에 저장해야합니다. 복제를 사용하면 증폭됩니다.

데이터베이스 스토리지의 장점 :

  1. 세션 선호도 나 상태 복제에 대해 걱정할 필요가 없습니다. 모든 요청을 라운드 로빈 할 수 있습니다.
  2. 응용 프로그램의 메모리 오버 헤드가 줄어 듭니다.
  3. 주문이 완료되면 어쨌든 데이터베이스의 모든 것이 종료되므로 데이터가 이미 있으므로 완료가 쉬워 질 수 있습니다.

데이터베이스 스토리지의 단점 :

  1. 버려진 장바구니-일부 익명 사용자가 장바구니에 상품을 추가하고 사라졌습니다. 어떤 종류의 만료 프로세스가 없으면 해당 데이터는 영구적으로 유지됩니다.
  2. 사용자를 추적하고 주어진 요청에 대해 기존 또는 새로운 브라우징 세션을 나타내는 지 알아낼 수있는 방법을 찾아야합니다. (예, 쿠키를 사용하는 경우 쉽지만 두 명의 사용자가 같은 ID로 끝나지 않도록하려면 어떻게해야합니까?)
  3. 더 많은 코드

사용중인 플랫폼에 대해서는 언급하지 않았습니다. 요청 / 응답주기 수명 동안 세션 데이터가 메모리에만 존재하는 데이터베이스 기반 세션을 사용하여 데이터베이스에서로드하고 데이터베이스에 다시 저장하는 접근법을 찾고 싶습니다. 이것은 과거에 나에게 도움이되었습니다.

데이터베이스 기반 세션의 장점 :

  1. 서버 선호도가 필요하지 않습니다.
  2. 앱 서버 메모리에서 쉬움
  3. 유휴 / 폐기 된 세션 데이터가 정리됩니다.
  4. 사용자 첫 방문, 반복 방문, 세션 종료의 수명주기가 모두 파악되었습니다.
  5. 쉬운 코딩

데이터베이스 기반 세션의 단점 :

  1. 구성-컨테이너는 PHP, Java EE (Tomcat, Jetty, JBoss 등), node.js + express.js 또는이를 지원하지 않는 컨테이너인지 여부를 조사하고 올바른 구성을 제공해야합니다.
  2. 요청 당 2 개의 데이터베이스 작업을 추가하므로이를로드 테스트해야 할 수도 있습니다.

누군가가 앞서 언급 한 세 번째 가능성이 있습니다. 쿠키 나 html 로컬 스토리지에 모든 것을 포함 시켜서 세션 사용을 완전히 건너 뛰고 클라이언트 측 스토리지를 사용할 수 있습니다.

나는 그것의 장단점을 당신에게 연습으로 남겨 둘 것이지만, 나는 당신에게 html5 저장을 위해 브라우저 호환성이 신중하게 검토해야 할 것이라는 힌트를 줄 것이다.

나는 당신을 위해 사실을 설명했습니다. 바라건대 이것이 상황에 맞는 올바른 결정을 내리는 데 도움이되기를 바랍니다.


쇼핑 바구니에 담긴 물건의 구매율을 분석하기 위해 조직이 적절하게 데이터베이스 스토리지의 이점을 놓쳤습니다.
HLGEM

@HLGEM 탁월한 아이디어-나는 그런 생각을하지 않았다!
Brandon

나는 데이터베이스의 데이터를 분석하는 사람이기 때문에이 물건을 생각합니다. 데이터베이스를 설계 할 때 첫 번째 질문 중 하나는이 데이터가 필요하며 누구도 거의 요구하지 않는 것입니다.
HLGEM

3

언급 한 두 가지 사용 사례를 고려해 보겠습니다.

사용자가 로그인하지 않고 장바구니에 제품 추가 (익명 사용자)

이 경우 세션 중에 사용자의 장바구니 정보를 확실히 저장하여 세션에 사용자를 제대로 제공하려고합니다. 로그인 / 계정 생성을 결정한 경우 다음 사용 사례에 따라이를 처리 할 수 ​​있습니다. 로그인하지 않으면 세션 동안 게스트를 제공하는 데만 사용 되었기 때문에이 게스트 사용자 정보로 데이터베이스를 채울 필요가 없습니다. 이 데이터는 상태 비 저장 기반으로 처리 할 수 ​​있습니다. 즉, 상태가 세션마다 저장되지 않습니다.

사용자가 로그인하여 장바구니에 제품을 추가 중입니다.

이 경우 위와 동일한 방식으로 처리 할 수 ​​있으며 (이전의 전자 상거래 사이트)이 정보를 데이터베이스에 추가하고 사용자와 연관시킬 수도 있습니다. 주로 "제품 검색 기록", "권장 사항"등과 같은 상태 저장 (세션에서 세션으로 저장된 상태) 정보를 제공하는 데 사용됩니다 (예 : Amazon.com과 유사).

고려해야 할 사항 :

  • 데이터를 저장해야합니까?
  • 그렇다면 사용자에게 더 나은 서비스를 제공하기 위해 어떤 데이터를 저장해야합니까?
  • 확장 성 + 데이터 저장-많은 사용자를 지원하기 위해 데이터베이스에서 빠른 조회를 위해 카트 정보를 어떻게 저장합니까?

3
또한 회사가 판매를 분석하는 데 도움이됩니다. 제품을 장바구니에 넣지 만 구매하지 않은 빈도 비율이 높으면 제품이 어떻게 제공되는지 또는 가격이 변화가 구매율을 향상시키는 데 도움이 될 수 있는지 확인하고 싶을 수 있습니다. 또한 저장하면 사용자가 원하는 날에 tehm을 다시 주문하지 않고 주문한 경우 해당 항목을 빠르게 볼 수 있습니다. 어쩌면 장바구니에 넣었을 수도 있지만 실제로 구매하기 위해 내일 (지급일)까지 기다릴 수 있습니다. 따라서 데이터를 저장하면 실제 고객이 더 많은 물건을 구매할 수 있습니다.
HLGEM

그러나 결국 이것은 요구 사항 정의 문제이므로 비즈니스에 계획을 세우고 무언가를 구축하기 전에 예상 한대로해야합니다.
HLGEM

Remeber는 향후 비즈니스에 필요한 데이터가 무엇인지에 대한 관점에서 주문 및 장바구니에 대해 생각해야합니다. 데이터를 분석하려면 저장하는 것이 가장 좋습니다. 개발자는 사용자 인터페이스에 매달리고 원하는 데이터 저장 목적을 잊어 버립니다.
HLGEM

@HLGEM : 아주 좋은 지적입니다! 나는이 질문에 단지 손님 사용자 대 사이트 멤버를위한 자동차 기능을 지원할 필요성에 기초하여 대답했다. 비즈니스 관점에서는 지역, 사용자 수, 관련 제품, 구매 대 폐기 등의 측면에서 제품을 추적하는 일종의 데이터베이스 시스템에 의존하는 별도의 통계 시스템이 있어야합니다.
GeekByte

0

사용자가 로그인하지 않은 경우 세션으로 이동하십시오. 로그인 한 경우에도 먼저 세션에서 카트를 작성하고 사용자가 로그 아웃하거나 세션이 시간 종료 된 경우에만 데이터베이스에 카트를 유지하십시오.

세션에서 생성되는 카트 수를 확인해야합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.