강의 컨설팅 트레이닝 무료진단 무료책자 마케팅편지 마케팅정보공유 다이어리 서비스제휴 고객센터

세션정보를 DB에 넣고 중복로그인 막고 사이트 통합로그인
작성자 : 13 김영철
등록날짜 : 2009.01.13 23:02
16,910
안녕하세요..

 

중복 로그인 부분 찾느라 힘드신 분들 많으시져..

 

저도 찾다가 못찼았지만..(asp는요)제가 지금 올릴건 죄송하지만 php입니다..

보시고 많은분들이 도움이 되셨음 하구요..

이걸 보시고 asp로 구현 가능하신분은 소스좀 올려 주셨으면 하네요..(부탁입니다. ^^v)

수고들 하세요...

 

아참 그리고 이글은 저도 퍼온 글입니다.

 

 

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

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

늘 행복하세요!

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

<?php
//!! 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(); 

[출처] 

"쇼핑몰·홈페이지·오픈마켓
블로그·페이스북·이메일 등의 각종 마케팅 글쓰기,
각종 광고, 영업, 판매, 제안서, 전단지
반응율 3배×10배 이상 높이는 마법의 8단계 공식"
자세히보기

Comments

번호 제목 글쓴이 날짜 조회
열람중 세션정보를 DB에 넣고 중복로그인 막고 사이트 통합로그인 13 김영철 01.13 16911
3284 [html] Form - 라디오버튼에서 value값 넘기기 99 단국강토 02.05 14690
3283 제가 사용하고 있는 마케팅프로그램입니다 댓글1 3 천지인 05.23 13187
3282 네이버 관련 바이럴마케팅 프로그램 총집함(카페/블로그/지식인 등) 3 천지인 05.15 13092
3281 관공서/회사접속 차단 해제 댓글8 3 초이스 05.13 12772
3280 엑셀 파일 합치기 매크로 댓글17 2 coruscate 09.14 11104
3279 파일1입니다 url helper 댓글1 2 비비드바비 04.29 10856
3278 파일2입니다 2 비비드바비 04.29 10474
3277 [펌] 제11강 - ADO(Active Database Object) - Database Access Component Cobol vs C#-1 M 최고의하루 12.23 9483
3276 Aqua data studio 한글 깨짐 설정 13 김영철 01.29 9020
3275 history.back() 시 폼데이터 유지하기 13 김영철 01.15 7583
3274 [ ASP ] url 정보의 파라메터 및 쿼리스트링 자유롭게 조정하는 함수 M 최고의하루 12.19 7465
3273 플래시에서 책장 넘기는 효과 내는 학습 자료 M 최고의하루 12.26 7418
3272 MBTI 테스트지 + 테스트파일 + 결과 댓글35 2 비비드바비 04.29 7230
3271 XML을 해야 하는 이유 13 김영철 01.29 6997
3270 gva.bgdb 인증크랙 댓글4 M 최고의하루 12.18 6791
3269 테이블 넓이 고정 태그:자동 줄 바꿈(break-all, nowrap, fixed) 99 단국강토 02.05 6586
3268 PHP 답변형 게시판 / 자료실 /PHP강좌 13 김영철 01.13 6168
3267 PDF-Pro 4 free 2 춘몽 11.22 6128
3266 award bios 어워드 바이오스 설정법 M 최고의하루 12.18 5896
3265 퍼지는 빛 만들기 | 포 토 샵 [중급] 10 액션쟁이 01.05 5763
3264 ntdll.dll 오류 해결방법 M 최고의하루 01.12 5728
3263 Edit Plus html 내보내기 예제 M 최고의하루 12.20 5727
3262 [ MySQL ] MySQL 5 한글 UTF8 한글 깨짐 분석 (Windows 용) M 최고의하루 12.04 5726
3261 ASP의 EXECUTE, EVAL 사용하기 M 최고의하루 12.23 5682
3260 log 분석 13 김영철 01.14 5635
3259 메일 수신 확인 체크 소스입니다 13 김영철 01.13 5624
3258 화면캡쳐하는 방법, 동영상 이나오는 화면 캡쳐시 안보이는 부분 나오게 하는 방법 M 최고의하루 12.26 5590
3257 The Oracle + PHP Cookbook :: Oracle/PHP 환경의 LOB 처리 13 김영철 01.14 5588
3256 엑셀 자동달력 서식 댓글5 M 최고의하루 12.18 5540
마케팅
특별 마케팅자료
다운로드 마케팅자료
창업,경영
기획,카피,상품전략
동기부여,성취