PHP의 세션은 기본적으로 서버 측에 파일로 저장되며, 클라이언트 측에서는 쿠키를 사용하여 변수를 저장합니다. 이로 인해 보안상의 이유로 사용자가 브라우저의 쿠키를 끄면 세션 관련 문제가 발생합니다. 프로그램의 작업은 실행되지 않습니다. 따라서 세션 데이터를 데이터베이스에 저장할 수 있다면 클라이언트 설정에 제약을 받지 않고 성능과 확장성이 비약하게 된다. 프로그램에서 사용하는 핵심 함수는 session_set_save_handler 이고, php.ini 의 session.save_handler = files 를 user 로 변경해야 합니다. 여기서 논의할 환경은 linux(freesd) apache mysql php입니다.
데이터 테이블 구조: [세션]
CREATE TABLE 세션(
sesskey char(32) not null,
expiry int(11) unsigned not null,
value text not null,
PRIMARY KEY(sesskey)
);
프로그램 코드: [session_inc.php]
$SESS_DBHOST = "yourhost" /* 데이터베이스 서버 호스트 이름 */
$ SESS_DBNAME = "yourdb"; /* 데이터베이스 이름 */
$SESS_DBUSER = "youruser"; /* 데이터베이스 사용자 */
$SESS_DBPASS = "yourpassword" /* 데이터베이스 비밀번호 */
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
function sess_open($save_path, $session_name) {
global $SESS_DBHOST, $SESS_DBNAME, $SESS_DBUSER, $SESS_DBPASS, $SESS_DBH;
if (! $SESS_DBH = mysql_pconnect($SESS_DBHOST, $SESS_DBUSER, $SESS_DBPASS)) {
echo "
$SESS_DBUSER로 $SESS_DBHOST에 연결할 수 없습니다.
echo "< li>MySQL 오류: " . mysql_error();
; SESS_DBNAME"
die;
return true;
function sess_close() {
true를 반환합니다. ;
전역 $SESS_DBH, $SESS_LIFE;
$qry = "sesskey = '$key' AND expiry > "
$qid = mysql_query($qry, $ SESS_DBH);
if (list($value) = mysql_fetch_row($qid)) {
return $value;
}
return false; key , $val) {
global $SESS_DBH, $SESS_LIFE;
$expiry = time() $SESS_LIFE; //만료 시간
$value = addlashes($val); " session_tbl 값에 삽입('$key', $expiry, '$value')"
$qid = mysql_query($qry, $SESS_DBH)
if (! $qid) {
$ qry = "세션_tbl 설정 만료 = $expiry, 값 = '$value' WHERE sesskey = '$key' AND expiry > " . time()> $qid = mysql_query($qry, $SESS_DBH); 🎜 > }
return $qid;
}
function sess_destroy($key) {
global $SESS_DBH
$qry = "sesskey = '$key'에서 삭제";
$qid = mysql_query($qry, $SESS_DBH);
return $qid;
}
function sess_gc($maxlifetime) {
global $SESS_DBH; 만료되는 곳에서 session_tbl 삭제 < " . 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_start(); ? >
위 단계를 완료한 후 프로그램에서 session_start() 대신 require("session_inc.php")를 사용하세요.
[이 글의 저작권은 작성자와 Oso.com에 공동으로 있습니다. 전재하실 경우 작성자와 출처를 명시해주세요.]
위 내용은 데이터베이스 저장 세션의 내용을 포함하여 데이터베이스를 사용하여 세션을 저장하는 방법을 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.