session 라이브러리를 만들었습니다. > MySQL Tip

본문 바로가기
 

session 라이브러리를 만들었습니다.

페이지 정보

작성자 이름으로 검색 댓글 0건 조회 18,615회 작성일 05-08-07 18:22

본문



session 라이브러리를 만들었습니다.
 

글쓴이 : 강동길


저작권자 이메일 :


출처 :

koreaphp.co.kr


작성일 : 2002/04/17 10:37:34


 


글내용 본 내용은 HTML 형식으로
쓰여졌습니다. 소스를 보시려면

버튼을 누르세요.




<?

######################################################################


##

## Script-x Name : session.inc

## Author : jN-Online

## Code Version : 0.5

##

######################################################################






######################################################################


##

## Table Schema

/*



CREATE TABLE session (

SessionID varchar(32) NOT NULL,

SessionData BLOB NOT NULL,

LastUsed timestamp(14),

PRIMARY KEY (SessionID)

);



*/



#######################################################################


##

## Usage :

##

## 1. 세션기능을 추가하고 싶은 프로그램의 상단(헤더가 전송되기 이전)에서 session.inc 를
호출한다.

## ex) require "session.inc" ;

##

## 2. 페이지 내부의 아무곳에서나 $Session[] 배열에 값을 할당하고 사용한다.

## ex) $Session[user] = "testuser" ;

## $Session[mail] = "user@mail.your_host.com" ;

##

## 3. 같은 세션키값으로 프로그램이 호출될 경우 이전에 $Session[] 배열에 할당하였던 변수와
값들을 사용할 수 있다.

## ex) echo $Session[user]." , ".$Session[mail] ;

##

## 4. 페이지가 달라도 같은 세션키를 가지면 이전에 정의했던 변수와 값을 사용할 수 있다.

##

##

## 주의사항 :

##

## 1. php4(Zend)로 실행되는 환경의 경우 새로 추가된 "Session"관련 함수때문에 함수명이
충돌하여 제대로 동작하지 않을 수 있습니다.

## 2. 1의 경우 session(혹은. Session)으로 시작하는 함수 및 변수명을 다른것으로 바꾸면
됩니다.

## 3. 본 라이브러리는 페이지의 헤더가 전송되기 이전에 실행되어야 합니다.

##





#######################################################################


##

## 변수 및 환경 설정 :

## ( 사용환경에 따라 아래 변수값들을 변경하시기 바랍니다.)



$Session_Host = "localhost" ; // 데이터베이스 서버 (MySQL 3.22 이상)


$Session_User = "" ; // 데이터베이스 사용자

$Session_Password = "" ; // 데이터베이스 패스워드

$Session_Database = "bbs" ; // session 테이블이 위치한 데이터베이스명



$Cookie_Mode = 1 ; // 쿠키 사용여부 ( 1: 사용, 0: 사용안함 )

$Session_URL1 = "http://www.your_host.com" ; // 세션경로 (
"$Cookie_Mode = 1" 일때만 사용 )

$Session_URL2 = "bbs" ; // 호스트명 이후의 경로 ( Default :
http://www.your_host.com/bbs )



## 설정완료 ( 이후부터는 변경하지 않아도 됩니다.)

#######################################################################








// 데이터베이스 접속



function session_connect() {



global $Session_Host, $Session_User, $Session_Password,
$Session_Database;



mysql_pconnect($Session_Host, $Session_User,
$Session_Password);

mysql_select_db($Session_Database);



}





// 데이터베이스 에러체크



function mysql_check_error() {



if(mysql_errno()) {

echo "데이터베이스 에러 : " . mysql_errno() . " " .
mysql_error()."
n";

}



}





// 세션기능 시작



function session_start($Cookie_mode, $Session_URL1,
$Session_URL2) {



global $SessionID, $Session ;



register_shutdown_function("session_end") ; // 페이지가 끝날때 세션기능
자동종료 ( 주의 : 세션은 살아있고 로그아웃 되지 않음 )



session_connect(); // 데이터베이스 접속



if($SessionID) {



$sql = "SELECT SessionData FROM session WHERE
SessionID='$SessionID' AND LastUsed > DATE_SUB(NOW(),
INTERVAL 1 HOUR)";

// 페이지 세션키가 제공되는 경우 최종 사용후 1시간 이전의 세션을 검출



$result = mysql_query($sql);

mysql_check_error();



if($row = mysql_fetch_array($result)) {

$Session = unserialize($row[0]) ;

return; // 주어진 세션키값에 대응하는 레코드가 있으면 SessionData 필드의 값을
$Session[] 으로 배열화

}



}



// else , 새로운 세션키 발행

$SessionID = md5(uniqid("")); // md5 와 uniqid 를 이용하여 유일한 세션키
값을 발행

$Session = array(); // Session 을 배열화 ( 주의 : 새로운 세션키를 발행하였기
때문에 $Session[] 배열이 비어있음



if($Cookie_mode == 1) { // 클라이언트에 세션키값을 쿠키로 발행

SetCookie("SessionID", $SessionID, 0, $Session_URL2,
$Session_URL1);

}



}





// 세션기능 종료



function session_end() {



global $SessionID, $Session;



if(isset($SessionID)) { // 세션키가 존재하면 동일 키값이 존재하는 레코드의 값을 수정


mysql_query("REPLACE INTO session (SessionID, SessionData) "
.

"VALUES ('$SessionID', '" . AddSlashes(serialize($Session))
. "')");

}



mysql_query("DELETE FROM session WHERE LastUsed <
DATE_SUB(NOW(), INTERVAL 1 HOUR)");

// 마지막 사용후 1시간이 지난 세션을 삭제



}





// 세션 영구삭제



function session_abandon() {



global $SessionID, $Session;



mysql_query("DELETE FROM session WHERE
SessionID='$SessionID'");



unset($SessionID);

unset($Session);



}



session_start() ; // 세션기능 시작



?>


댓글목록

등록된 댓글이 없습니다.

Total 243건 13 페이지
MySQL Tip 목록
번호 제목 글쓴이 조회 날짜
27 이름으로 검색 17912 08-07
26 이름으로 검색 15704 08-07
25 이름으로 검색 15839 08-07
24 이름으로 검색 15390 08-07
23 이름으로 검색 14450 08-07
22 이름으로 검색 15070 08-07
21 이름으로 검색 8110 08-07
20 이름으로 검색 8040 08-07
19 이름으로 검색 15263 08-07
18 이름으로 검색 18409 08-07
17 이름으로 검색 18007 08-07
16 이름으로 검색 7469 08-07
열람중 이름으로 검색 18616 08-07
14 이름으로 검색 8132 08-07
13 이름으로 검색 17582 08-07
12 이름으로 검색 14586 08-07
11 이름으로 검색 15180 08-07
10 이름으로 검색 7939 08-07
게시물 검색