> 백엔드 개발 > PHP 튜토리얼 > 데이터베이스를 사용하여 PHP에서 세션을 저장하는 방법

데이터베이스를 사용하여 PHP에서 세션을 저장하는 방법

WBOY
풀어 주다: 2016-08-08 09:34:03
원래의
1082명이 탐색했습니다.

우리는 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 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

  • 관련 라벨:
    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿