2013-02-05 2 views
0

전자 상거래 웹 사이트를 만들고 싶고 사용자가 항목을 구매하도록 계정을 강요하고 싶지는 않지만 언제든지 그것을 할 수 있습니다.CodeIgniter를 사용하여 장바구니를 저장하기 위해 세션을 사용합니다.

CodeIgniter에서 세션 클래스를 사용하여 장기간 (6 개월 또는 1 년) 사용자 세션 (예 : 쇼핑 카트 항목)을 유지할 수 있습니까? 나는 CI에 관한 세션에 관한 사용자 가이드를 읽었으며 세션 파일을 닫은 후에도 세션이 계속 실행되는 것으로 추측하고있는 설정 파일에서 session_expire_on_close 변수를 false로 설정하여 만료되지 않도록 세션을 설정하는 옵션을 제공한다고합니다. 브라우저.

사용자가 사이트를 방문하거나 바구니에 무언가를 추가 할 때마다 세션을 시작할 수 있습니다. 그런 다음 떠나서 다시 돌아 오기로 결정하면 내 데이터베이스의 세션 테이블에서 장바구니 정보를 확인하고 다시 제공 할 수 있습니다.

사용자 가이드의 user_data 열에 예제로 제공된 ci_sessions 테이블에 쇼핑 카트 항목을 저장해야하는지 알고 싶었습니까? 충분하니?

내가 올바른 방향으로 가고 있는지 알고 싶습니다. 고맙습니다

+0

그런 질문을하는 경우, CodeIgniter 장바구니 라이브러리를 사용하는 것이 현명 할 수 있습니다. 단, 절름발이라고 말하는 것은 아니지만 유지 관리가 훨씬 쉽습니다. 나는 그것이 정말로 잘 만들어졌으며 수많은 사용자 정의 필드가 존재할 수 있음을 발견했습니다! –

+0

@Vlakarados 장바구니 클래스는 장바구니의 항목을 추가/업데이트/삭제할 때만 사용하며 나중에 액세스 할 수 있도록 보관하지 않는 것이 좋습니다. – a7omiton

+0

이 http://ellislab.com/codeigniter/user-guide/libraries/cart.html을 읽으십시오. –

답변

2

짧은 대답 : 예, 올바른 길을 가고 있습니다.

내가 할 거라고 어떻게 (이 중 일부는 분명있을 수 있습니다) :

  1. config/autoload.phpsession 라이브러리를 추가 그래서 자동으로 시작됩니다.

  2. 필요에 따라 config/config.php에서 '세션 변수'섹션을 설정 - sess_expiration = some long time, sess_expire_on_close = false, use_database = true

  3. 세션에 간단한 만 저장 제품 ID를 유지합니다. 다음은 예를 들어 기본 add_to_cart 기능은 다음과 같습니다

    public function add_to_cart($product_id) { 
    
    // Whenever a user adds an item to their cart, pull out any they already have in there 
    
    $cart_products = $this->session->userdata('cart_products'); 
    
    // Add the new item 
    
    $cart_products[] = $product_id; 
    
    // And put it back into the session 
    
    $this->session->set_userdata('cart_products', $cart_products); 
    
    } 
    
  4. 은 DB에서 더 많은 세부 정보 (예 : 제품 이름)을 빼고 화면에 표시하기 위해 세션에서 product_ids를 사용합니다.

CI가 자신의 SESSION_ID를 유지하기 때문에이 방법은 자동으로 세션에게 사용자가 사이트를 다시 방문 할 때마다 다시 채 웁니다해야합니다, 당신은 지금까지 수동으로 ci_sessions 테이블을 쿼리 또는 표준 PHP 세션을 사용할 필요가 없습니다.

위의 내용은 테스트되지는 않았지만 명확한 설명이 필요한 경우 큰 도움이 되길 바랍니다.

+1

안녕하세요, 아담 감사합니다. 위의 '일반 코멘트'섹션에 사람들이 게시 한 것부터 Cart 클래스를 사용하는 것이 가장 적합 할 것 같습니다. 세션을 사용하여 쇼핑 바구니에있는 항목을 추적합니다. 장바구니 클래스에 대한 설명서를 보면 테이블 (ci_sessions)도 필요하다고 생각합니다. 어떻게 생각해? 나는 당신의 의견을 고맙게 여길 것이다. – a7omiton

+0

사실, 장바구니 클래스는 완벽하게 당신에게 어울릴 것 같은데, 나는 그것을 완전히 잊었다! 네, 여전히 ci_sessions 테이블이 필요할 것입니다.하지만 직접 다시 쿼리 할 필요는 없습니다. 카트를 순서대로 변환 할 때'$ this-> cart-> contents();'를 사용하고 거기에서 원하는대로 처리하면됩니다 :-) –

+0

어떻게 이해하는지 정말 어려워요. 당신은 세션 테이블을 쿼리 할 필요가 없습니다, 그 경우에 그 요점은 무엇입니까? 예를 들어 사용자가 장바구니에 무언가를 추가하면 자동으로 세션이 시작되고 (오른쪽?) 세션이 만료 될 때까지 또는 장바구니가 파괴 될 때까지 세션이 지속됩니다. 세션 테이블의 필요성은 유효한 세션 만 보유하기 때문에 사용자가 주문을 구매할 준비가되면 테이블에 있는지 확인할 수 있습니다. 죄송합니다. 정확하게 표가 사용되는 이유를 모르겠습니다. – a7omiton

0

CodeIgniter는 PHP sessions을 방해하지 않는 자체 세션 (see this)을 사용합니다.

따라서 당신이 작성하는 일반 PHP 세션

session_start(); 

를 사용하거나 쿠키 (보통 PHPSESSID)에 저장되어있는 ID 기존의 세션을 재개 할 수있다. 그리고 어쩌면 당신은 쿠키 이름은 config.php를, sess_cookie_name에 충돌하지 마십시오 CodeIgniter의 구성에서 확인할 수 있습니다 세션 대신 CodeIgniter의의 하나

$_SESSION['MyData'] = 12345; 

를 사용합니다.

+0

미안하지만 게시 한 내용을 완전히 이해하지 못했습니다. PHP 세션을 사용하고 PHPSESSID를 사용하여 세션이 존재하는지 확인 하시겠습니까? – a7omiton

+0

그보다 더 간단합니다. CodeIgniter와 간섭하지 않는 PHP 세션을 사용하십시오. 'PHPSESSID'는 브라우저에 저장된 * 쿠키 이름입니다. 걱정할 필요는 없지만 CI의 쿠키 이름이 같으면 충돌이 발생합니다. 그래서'sess_cookie_name'이 'PHPSESSID'가 아님을 확인하기 위해 CI 설정을 점검 할 것을 제안했습니다. –

관련 문제