googleAdsense_widever


session library [펌] PHP

원문 주소 : 
음....
아주 가끔가다 위 글에 대한 질문이 옵니다...
그려서 훨 좋은 db에 세션을 저장하는 방법을 추가로 올립니다....
이전의 방법은 php.ini 를 일일이 수정해 줘야 하기땜에 손이 많이 갑니다
나아진점은
1. 세션값을 디폴트는 /tmp 밑에 저장하는데 이걸 mysql 을 이용합니다...
    이렇게 하면 속도도 빨라지고 혹시 서버가 별개이어도 mysql 만 접근이 가능하면 문제가 되지 않습니다.
2. php.ini 는 전혀 수정하실 필요 없습니다. (소스상에서 설정 다 바꾸어 줍니다)
머 이정도네요....
설명 들어갑니다...
1. 먼저 아래처럼 session.inc 라는 파일이 있습니다..
[session.inc]
<?
/- ------------------------------------------------------------------------
* Create a new database in MySQL called "sessions" like so:
*
* CREATE TABLE sessions (
*      sesskey char(32) not null,
*      expiry int(11) unsigned not null,
*      value text not null,
*      PRIMARY KEY (sesskey)
* );
*-
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
function sess_open($save_path, $session_name)
{
    global $SESS_DBH;
    $SESS_DBH = mysql_pconnect("localhost", "heal", "moga33") or die("Can't connect to SQL Server");
    mysql_select_db("heal", $SESS_DBH) or die("Can't connect to SQL Server");
    return true;
}
function sess_close()
{
    return true;
}
function sess_read($key)
{
    global $SESS_DBH, $SESS_LIFE;
    $qry = "SELECT value FROM sessions WHERE sesskey = '$key' AND expiry > " . time();
    $qid = mysql_query($qry, $SESS_DBH);
    if (list($value) = mysql_fetch_row($qid)) {
        return $value;
    }
    return false;
}
function sess_write($key, $val)
{
    global $SESS_DBH, $SESS_LIFE;
    $expiry = time() + $SESS_LIFE;
    $value = addslashes($val);
    $qry = "INSERT INTO sessions (sesskey,expiry,value) VALUES ('$key', $expiry, '$value')";
    $qid = mysql_query($qry, $SESS_DBH);
    if (! $qid) {
        $qry = "UPDATE sessions SET expiry = $expiry, value = '$value' WHERE sesskey = '$key' AND expiry > " . time();
        $qid = mysql_query($qry, $SESS_DBH);
    }
    return $qid;
}
function sess_destroy($key)
{
    global $SESS_DBH;
    $qry = "DELETE FROM sessions WHERE sesskey = '$key'";
    $qid = mysql_query($qry, $SESS_DBH);
    return $qid;
}
function sess_gc($maxlifetime)
{
    global $SESS_DBH;
    $qry = "DELETE FROM sessions WHERE expiry < " . time();
    $qid = mysql_query($qry, $SESS_DBH);
    return mysql_affected_rows($SESS_DBH);
}
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
session_set_cookie_params(0, "/", ".url.com");
session_start();
?>
이 파일이 젤 중요한데요...
요걸 세션을 쓰는곳마다 (그니까 session_start() 가 쓰이는 곳) 마다 첨부시켜주세요....
젤 위부분에 보면 테이블이 있습니다. 이거 mysql 에 만들어 주세요. 세션이 저장될 테이블입니다.
글구 젤 밑에서 두번째 줄에 보면
session_set_cookie_params(0, "/", ".url.com");
이게 있는데여 요걸 그쪽 도메인에 맞게 수정해 주세요...
2. 그리구 테스트 해보는 파일....
[session.php]
<? 
    include "session.inc";
    if ($mode == 'login')
    {
        if ( $logid=='toughing' && $passwd=='aaaa' ) 
        {
            echo("
                Login OK....<br>
            ");
            $_logid = $logid;
            $_passwd = $passwd;
            session_register("_logid");
            session_register("_passwd");
            echo("    <meta http-equiv='Refresh' content='1; URL=session1.php'>    ");
        }
        else
        {
            echo("Login Failure....<br>");
            echo("    <meta http-equiv='Refresh' content='3; URL=$PHP_SELF'>    ");
        }
        exit;
    }
    else if ($mode == 'logout')
    {
        session_unregister("_logid");
        session_unregister("_passwd");
        echo("    <meta http-equiv='Refresh' content='0; URL=$PHP_SELF'>    ");
    }
    //sess_gc(1);
    echo("
      <form name='log' action='$PHP_SELF' method='post'>
        <input type=hidden name=mode value=login>
        아이디 <input type=text size=10 name='logid' style='border : 1 solid #666666; font-family : 돋움'><br>
        암호 <input type=password size=10 name='passwd' style='border : 1 solid #666666; font-family : 돋움'><br>
        <input type=submit value='확인'>
      </form>
    ");
?> 
[session1.php]
<?
    include "session.inc";
    if ($_logid && $_passwd)
    {
        echo("
            이 페이지는 로그인을 한 사람만 볼 수 있당..<br>
            <a href='test.php'>갈은 도메인</a>
            <a href='http://www.hul.com/test.php?$SID'>다른 도메인</a>
                <form name='log' action='session.php' method='post'>
                    <input type=hidden name=mode value=logout>
                    <input type=submit value='로그아웃'>
                </form>
        ");
        $ss = session_get_cookie_params();
        echo("^$ss[lifetime]^$ss[path]^$ss[domain]^");
        exit;
    }
    echo("아무나 다 보는 페이지..<br>");
?>
머 대충 보면 아실꺼예요.....
요렇게 해 놓으면 서버가 틀리나 같으나 세션을 공유할 수가 있죵.....
제가 다 테스트 해본걸 그대루 올리는 거니깡 머 잘 될겁니다....
그럼.... 즐거운 하루 되세용~  ^______^

덧글

댓글 입력 영역


공지

어서오십시오.
트위터 : @FCliver
기저심리학 : 네이버카페
카카오톡 : FCliver
페이스북 : Fredric Cliver

통계 위젯 (화이트)

012
111
285966

접속자 위치