세션정보를 DB에 넣고 중복로그인 막고 사이트 통합로그인 하는 소스

DB클래스는 넣지 않습니다. 참고정도 하시라고 공개합니다. 여기 게시판에서 팁도 좀 얻었습니다. 잘 보시고 응용해 보세요!

세션구울 때 DB를 사용합니다. 그리고 중복로그인을 막고, 2차도메인을 사용하는 사이트에서 통합로그인이 가능토록한 소스입니다.

늘 행복하세요!

====== 아래부터 소스입니다. ==============

//!! eZSession DB (세션 DB핸들링 및 통합로그인)
/*

CREATE TABLE “ezsession_session” (
“sesskey” varchar(33) NOT NULL,
“expiry” int4 NOT NULL,
“value” text NOT NULL,
“uid” int4 NOT NULL,
“security” varchar(1) NOT NULL,
“remoteip” varchar(20),
CONSTRAINT “ezsession_session_pkey” PRIMARY KEY (“sesskey”)
);

// start session handling
include_once( “classes/ezsession.php” );

session_set_save_handler (“sess_open”, “sess_close”, “sess_read”, “sess_write”, “sess_destroy”, “sess_gc”);
session_set_cookie_params( 0, “/”, “.ohmytravel.com” );
session_start();
*/

include_once( “classes/ezdb.php” );

$ini =& INIFile::globalINI();
$SesstionTimeOut = 30 * 60;
$maxlifetime = $SesstionTimeOut;

function sess_open( $save_path, $session_name )
{
global $sess_save_path, $sess_session_name;

// $sess_save_path = $save_path;
// $sess_session_name = $session_name;

return true;
}

function sess_close()
{
return true;
}

function sess_read( $key )
{
global $sess_save_path, $sess_session_name;

$db =& eZDB::globalDatabase();

$value_array = array();

$db->array_query( $value_array, “SELECT value FROM ezsession_session WHERE sesskey=’$key’ AND expiry > ” . time() );

if( count( $value_array ) == 1 )
{
// 세션시간이 현재시간보다 크다면 정보를 가져온다.
return $value_array[0][$db->fieldName(“value”)];
}
else
{
$db->query( “DELETE FROM ezsession_session WHERE sesskey=’$key'” );
return false;
}
}

function sess_write( $key, $sess_data )
{
global $sess_save_path, $sess_session_name, $maxlifetime;

$db =& eZDB::globalDatabase();
$ret = false;

$session_array = array();
$check_array = array();

$expiry = time() + $maxlifetime;
$value = addslashes( $sess_data );
$remoteip = $_SERVER[“REMOTE_ADDR”];

// 세션정보가 존재하는지 체크
$db->array_query( $session_array, “SELECT * FROM ezsession_session WHERE sesskey=’$key’ AND value IS NOT NULL” );

if ( count( $session_array ) == 1 ) // 세션업데이트 – DB의 시간이 현재시간보다 크면 계속 시간을 업데이트 시켜 세션을 유지.
{
$res = $db->query( “UPDATE ezsession_session SET expiry=’$expiry’ WHERE sesskey=’$key’ AND expiry > ” . time() );

if( $res == true )
$ret = true;
}
else if ( count( $session_array ) == 0 ) // 세션정보가 없는 경우. DB에 세션을 추가한다.
{
if ( $sess_data )
{
$uid = $GLOBALS[‘ezuser_session_id’];

// 이중 로그인 차단! 흐흐~ 주기넹! 완벽한 중복로그인 차단이얌! ㅋㅋㅋ~
$db->array_query( $check_array, “SELECT value FROM ezsession_session WHERE uid=’$uid’ AND remoteip!=’$remoteip'” );

// 중복로그인을 검사하기 위한 필드. O 정상, X 중복로그인.
$security = “O”;
if ( count( $check_array ) == 1 )
{
$security = “X”;
}

// lock the table
$db->begin();
$db->lock( “ezsession_session” );

// 세션추가 – 로그인했을 경우 $sess_data 정보가 한번 넘어온다. 그 때만 추가한다.
$res = $db->query( “INSERT INTO ezsession_session ( sesskey, expiry, value, uid, security, remoteip ) VALUES ( ‘$key’, ‘$expiry’, ‘$value’, ‘$uid’, ‘$security’, ‘$remoteip’ )” );

if ( $res == true )
$ret = true;
}
}

$db->unlock();

if ( $ret == false )
$db->rollback( );
else
$db->commit();

return $ret;
}

function sess_destroy( $key )
{
global $sess_save_path, $sess_session_name;

$db =& eZDB::globalDatabase();

$db->query( “DELETE FROM ezsession_session WHERE sesskey=’$key'” );

return true;
}

/*********************************************
* WARNING – You will need to implement some *
* sort of garbage collection routine here. *
*********************************************/
function sess_gc( $maxlifetime )
{
$db =& eZDB::globalDatabase();

$db->query( “DELETE FROM ezsession_session WHERE expiry < " . time() ); return true;
}

// 세션 핸들링 (도메인 입력시 1차도메인 앞에 .(점)을 찍어야 한다.)
session_set_save_handler (“sess_open”, “sess_close”, “sess_read”, “sess_write”, “sess_destroy”, “sess_gc”);
session_set_cookie_params( 0, “/”, “.domain.com” );
session_start();

중고차…

작년 10월 아는 분이 상태 좋은 엘란트라 오토 있다고 해서 보러가서 바로 결정하고
구매후 올초부터 지금까지 수리비가 93만원 정도… 조금 있으면 배하고 배꼽하고
비슷해질거 같네요. 좀더 타다가 다음엔 새 차를 살까 합니다. 수리비 나가는거에
노이로제 걸릴것 같아서…. ^^;
토요일은 카센타에서 3시간반동안 있으면서 손보고 저녁때 서울 나가서 딸기 친구와
친구 신랑들과 술 한잔 하고 일요일엔 꼭두새벽부터 김치 담그기 도와주고 낮잠자고
잠시 중산 다녀오고….
사실 이 이야기를 쓰려고 한게 아닌데… ㅋㅋㅋ

드림서치(드림위즈)에도 사이트 추가. 여태 등록된 검색사이트중 다음에서 제일 많이 들어오고
그 다음은 북마크나 주소창에서 직접 이동.
한달에 10만 히트쯤 발생하고 7월말 오픈이후 지금까지 40만 히트 육박중…
자유로를 여기로 이동시키면 아주아주 쪼금 더 히트가 늘어나겠지..

일찍 퇴근 하기

허거덕!
앞쪽 사무실 직원들 30분에 퇴근했다고 하네요. 지금 저 혼자 남아있는데
저도 가야겠습니다. 그제, 어제 일찍 퇴근했는데 요즘 일하기가 싫은가봅니다.
오늘은 6시반에 가버리다니… ㅋㅋ
지금 가면 7시 10분이면 집에 도착하겠네.
퇴근하자아~~~~

독감예방주사

모두들 독감예방주사를 맞으세요.
저도 낼 맞을 예정이랍니다.
주사가 무섭긴 하지만 감기걸려서 엉덩이에 맞는 주사가 더 무서워
힘든 결정을 햇답니다.

지금 무지 졸립네요.
눈꺼풀이 천근만근..
오늘 무쟈게 바쁘게 뛰어다녔더만, 넘 졸립네요.
모두들 감기조심하세요.. 눈병도[아직도 눈병에 시달리는 사람들이 주변에 있네요..]

-_____________- zzzz