이전의 방법은 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>");
?>