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

본문 바로가기
 

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

페이지 정보

작성자 차동박 이름으로 검색 댓글 0건 조회 19,553회 작성일 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() ; // 세션기능 시작

?>
[이 게시물은 human님에 의해 2007-05-14 17:57:42 bulk2에서 복사 됨] [이 게시물은 human님에 의해 2007-05-15 09:09:28 bulk3에서 이동 됨]

댓글목록

등록된 댓글이 없습니다.

Total 243건 12 페이지
MySQL Tip 목록
번호 제목 글쓴이 조회 날짜
45 차동박 이름으로 검색 21436 08-07
44 차동박 이름으로 검색 11006 08-07
열람중 차동박 이름으로 검색 19554 08-07
42 차동박 이름으로 검색 10889 08-07
41 차동박 이름으로 검색 20481 08-07
40 차동박 이름으로 검색 19020 08-07
39 차동박 이름으로 검색 19223 08-07
38 차동박 이름으로 검색 11304 08-07
37 차동박 이름으로 검색 20765 08-07
36 차동박 이름으로 검색 21649 08-07
35 차동박 이름으로 검색 11249 08-07
34 차동박 이름으로 검색 21669 08-07
33 차동박 이름으로 검색 19701 08-07
32 차동박 이름으로 검색 19010 08-07
31 차동박 이름으로 검색 22708 08-07
30 차동박 이름으로 검색 11131 08-06
29 차동박 이름으로 검색 10809 08-04
28 이름으로 검색 7643 05-14
게시물 검색