우리는 PHP 세션이 기본적으로 서버 측에 파일로 저장되고 클라이언트 측에 변수를 저장하는 데 쿠키가 사용된다는 것을 알고 있습니다. 이로 인해 사용자가 보안상의 이유로 브라우저의 쿠키를 끄면 프로그램이 문제를 일으킬 수 있습니다. 세션 관련 작업은 실행되지 않습니다. 따라서 세션 데이터를 데이터베이스에 저장할 수 있다면 클라이언트 설정에 제약을 받지 않고 성능과 확장성이 비약하게 된다. 프로그램에서 사용하는 핵심 함수는 session_set_save_handler 이고, php.ini 의 session.save_handler = files 를 user 로 변경해야 합니다. 여기서 논의할 환경은 linux(freesd)+apache+MySQL+php 입니다.
데이터 테이블 구조: [세션]
CREATE TABLE 세션(
sesskey char(32) null이 아님,
만료 int(11) unsigned null이 아님,
값 텍스트가 null이 아닙니다.
기본 키(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")
함수 sess_open($save_path, $session_name) {
전역 $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 "
MySQL 오류: " . mysql_error();
죽다
}
If (!mysql_select_db($SESS_DBNAME, $SESS_DBH)) {
echo "$SESS_DBNAME 데이터베이스를 선택할 수 없습니다.
죽다
}
true를 반환합니다.
}
함수 sess_close() {
true를 반환합니다.
}
함수 sess_read($key) {
글로벌 $SESS_DBH, $SESS_LIFE
$qry = "sesskey = '$key' AND 만료 >에서 값 선택"
$qid = mysql_query($qry, $SESS_DBH)
If (list($value) = mysql_fetch_row($qid)) {
$값 반환
}
거짓 반환
}
함수 sess_write($key, $val) {
글로벌 $SESS_DBH, $SESS_LIFE
$expiry = time() + $SESS_LIFE; //만료 시간
$value = addlashes($val)
$qry = "session_tbl 값에 삽입('$key', $expiry, '$value')"
$qid = mysql_query($qry, $SESS_DBH)
If (! $qid) {
$qry = "세션_tbl 설정 만료 = $expiry, 값 = '$value' WHERE sesskey = '$key' AND expiry > "
$qid = mysql_query($qry, $SESS_DBH)
}
$qid 반환
}
함수 sess_destroy($key) {
글로벌 $SESS_DBH
$qry = "sesskey = '$key'인 곳에서 session_tbl을 삭제합니다.
$qid = mysql_query($qry, $SESS_DBH)
$qid 반환
}
함수 sess_gc($maxlifetime) {
글로벌 $SESS_DBH
$qry = "만료되는 session_tbl에서 삭제
$qid = mysql_query($qry, $SESS_DBH)
mysql_affected_rows($SESS_DBH)
를 반환합니다.
}
session_set_save_handler(
"sess_open",
"sess_close",
"sess_read",
"sess_write",
"sess_destroy",
"sess_gc")
세션_시작()
?>
위의 단계를 완료한 후 프로그램에서 session_start() 대신 require("session_inc.php")를 사용합니다. 다른 세션 함수는 여전히 이전과 동일한 방식으로 호출됩니다.
위 내용은 데이터베이스 저장 세션의 내용을 포함하여 PHP 데이터베이스를 사용하여 세션을 저장하는 방법을 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.