session 라이브러리를 만들었습니다.
페이지 정보
작성자 이름으로 검색 댓글 0건 조회 18,615회 작성일 05-08-07 18:22본문
session 라이브러리를 만들었습니다. | ||
글쓴이 : 강동길 | 저작권자 이메일 : | |
출처 : | 작성일 : 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() ; // 세션기능 시작 ?> |
관련링크
댓글목록
등록된 댓글이 없습니다.