2014-09-15 2 views
0

비슷한 제목의 게시물을 보았습니다. checking status of session with session idHow to tell if a session is active?이지만, 달성하려는 내용과 관련이없는 것으로 보입니다.세션 ID를 통해 세션 상태 확인

나는 사용자가 로그인했는지 여부에 관계없이 $_SESSIONsession_id()을 사용하여 카트를 추가 할 수 있습니다.

장바구니에 항목을 추가하면 세션 ID가있는 장바구니 표에 항목이 추가됩니다.

간단히 말하자면 세션 ID 목록에서 어떤 세션이 활성 상태이고 어떤 세션이 crontab에서 사용 중인지 알아 내면 데이터베이스의 장바구니 표에서 중복 항목을 제거 할 수 있습니까?

+0

세션에서 활성 및 비활성을 모두 원하십니까? –

+0

글쎄 기술적으로 나는 DB에서 제거 할 수 있도록 어떤 것들이 비활성 상태인지 알 필요가 있습니다. – PavKR

+1

PHP에서 활성/만료 된 세션 목록을 얻을 수 있는지 확실하지 않습니다. 그러나 이것은 당신이 할 수있는 것입니다 : 일단 장바구니가 초기화되면, 세션 ID를 테이블에 저장하십시오. (당신이 이미 그렇게하고있는 것 같네요) ** 타임 스탬프로 ** (아직 그렇게하지 않은 것 같습니다). 사용자가 페이지를로드 할 때마다 타임 스탬프가 업데이트됩니다 (사용자가 페이지에서 많은 시간을 보내는 경우 ajax 호출을 보내 세션을 정기적으로 새로 고침 할 수 있습니다). 이전 세션에 대한 임계 값 (예 : 2 시간)을 정의한 다음이 임계 값보다 오래된 세션 (아마도 cron 작업 사용)을 데이터베이스에서 삭제하십시오. 그게 작동하는지 알려주세요. – Krumia

답변

0

충분한 권한이있는 경우 SessionHandler을 사용하여이 작업을 수행 할 수 있습니다. (작품 PHP> 5.4.0에서) 코드에서 다음

class MySessionHandler extends SessionHandler 
{  
    public function __construct() 
    { 
     // database initialization code 
    } 

    public function destroy($id) 
    { 
     $ret = parent::destroy($id); 
     // database uninitialization code 
     return $ret; 
    } 
} 

:

ini_set('session.save_handler', 'files'); 
$handler = new MySessionHandler(); 
session_set_save_handler($handler, true); 
session_start(); 

이를 사용하기 전에, 나는 철저하게 내가 위의 링크 된 문서를 읽어보실 것을 조언.


그러나 장바구니를 작성 중이므로 세션 변수에 장바구니 정보를 저장하는 것이 더 쉽습니다.

+0

흠, 흥미 롭습니다 - 나는 전체 서버에 액세스 할 수 있으므로이 것을 제공 할 것입니다. 세션을 사용하지 않으려는 유일한 이유는 회원이 계정에 다시 로그인하고 장바구니에서 선택한 항목을 계속 유지할 수 있기를 원하기 때문입니다. – PavKR

+0

@thePav : DB 또는 세션 변수에 저장하는 경우 세션을 오래 동안 만료시키지 않으면 안됩니다. – Krumia

+0

비회원의 경우 카트는 세션을 기반으로하며 (비 활동시 약 2 시간의 만료 시간 기준), 회원의 경우 데이터가 첨부 된 데이터베이스에 있으므로 카트 만료는 없습니다. 사용자 ID (로그인 한 회원은 장바구니 세션이 필요하지 않음). – PavKR