유일키 $s_cart_id 가 서로 다른 컴퓨터에서 동일하게 할당될 수 있나요?

유일키 $s_cart_id 가 서로 다른 컴퓨터에서 동일하게 할당될 수 있나요?

QA

유일키 $s_cart_id 가 서로 다른 컴퓨터에서 동일하게 할당될 수 있나요?

본문

A컴퓨터에서 비회원으로 장바구니에 넣은 상품이

일부 회원(B컴퓨터)의 장바구니에 노출이 되고 있어요.

 

매번 그런것은 아니구요.

그런 경우도 있고, 아닌 경우도 있어요.

 

예를들면 지금 당장 제가 동일 컴퓨터에서

비회원인 상태에서 1517289447 이 상품을 크롬 브라우저에서 장바구니에 넣고

웨일 브라우저에서 회원으로 로그인을 하고 장바구니를 보면 1517289447 이 상품이 없어요.

 

그런데, 매번은 아니고 가끔씩..

A컴퓨터에서 비회원이 장바구니에 넣은 상품이

B컴퓨터, C컴퓨터 (임의의 다른 컴퓨터)의 장바구니에 보여지는 것이에요.

 

유일키가 동일하게 할당이 된 경우인데요.

이럴 수가 있는지요?

 

shop.lib.php 파일에서


// cart id 설정
function set_cart_id($direct)
{
    global $g5, $default, $member;

    if ($direct) {
        $tmp_cart_id = get_session('ss_cart_direct');
        if(!$tmp_cart_id) {
            $tmp_cart_id = get_uniqid();
            set_session('ss_cart_direct', $tmp_cart_id);
        }
    } else {
        // 비회원장바구니 cart id 쿠키설정
        if($default['de_guest_cart_use']) {
            $tmp_cart_id = get_cookie('ck_guest_cart_id');
            if($tmp_cart_id) {
                set_session('ss_cart_id', $tmp_cart_id);
                //set_cookie('ck_guest_cart_id', $tmp_cart_id, ($default['de_cart_keep_term'] * 86400));
            } else {
                $tmp_cart_id = get_uniqid();
                set_session('ss_cart_id', $tmp_cart_id);
                set_cookie('ck_guest_cart_id', $tmp_cart_id, ($default['de_cart_keep_term'] * 86400));
            }

        } else {
            $tmp_cart_id = get_session('ss_cart_id');
            if(!$tmp_cart_id) {
                $tmp_cart_id = get_uniqid();
                set_session('ss_cart_id', $tmp_cart_id);
            }
        }

        // 보관된 회원장바구니 자료 cart id 변경
        if($member['mb_id'] && $tmp_cart_id) {
            $sql = " update {$g5['g5_shop_cart_table']}
                        set od_id = '$tmp_cart_id'
                        where mb_id = '{$member['mb_id']}'
                          and ct_direct = '0'
                          and ct_status = '쇼핑' ";
            sql_query($sql);
        }
    }
}
위 부분에 문제가 있는것 같은데요.

이 질문에 댓글 쓰기 :

답변 2

그누보드에 있는 get_uniqid() 함수가 트랜젝션 처리가 안되어서 발생하는 문제입니다.

구형 db와 호환성을 위해 lock table 방식으로 유니크아이디를 처리하게 되는데, 완벽하게 무결성이 보장되지 않습니다.

해당 테이블을 innodb 로 변경하시고, 해당 함수내 코드를 트랜젝션 처리로 변경해주세요.

 

제가 팁란에 공유한걸로 테스트 해보시고, 문제없으면 기존 함수를 대체하세요.

https://sir.kr/g5_tip/7912

 

1. 다른 브라우즈끼리는 쿠키를 공유할수 없습니다.

   쿠키의 저장정보는 해당 브라우즈 프로그램에서 지정하는 위치에 있고 구조도 달라서 당연히 안됩니다    그러므로 다른 브라우즈의 비회원 장바구니는 가져올수 없음..

 

2. 동일장바구니 문제는 ss_cart_direct의 이름이 공통이라 가끔 그런듯하네요..

   그냥 ss_cart_direct 를 ip마다 다르게

  get_session('ss_cart_direct'.$_SERVER[REMOTE_ADDR]);

  이런식으로 지정하시면 동일 장바구니 문제는 해결되겠네요.

 

답변을 작성하시기 전에 로그인 해주세요.
전체 123,471 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT