>백엔드 개발 >PHP 튜토리얼 >PHP 세션 적용에 대한 자세한 설명

PHP 세션 적용에 대한 자세한 설명

墨辰丷
墨辰丷원래의
2018-05-24 16:33:201931검색

PHP 세션 적용에 대한 자세한 설명

이 글은 주로 PHP 세션 적용 관련 정보를 자세하게 소개하고 있으니 필요한 친구들은 참고하시면 됩니다.

php 세션 고급 응용

웹 페이지는 웹 기술에서 매우 중요합니다. 눈에 보이지 않는 상태 연결 프로그램이므로 사용자의 브라우징 상태를 알 수 없습니다. 세션을 통해 사용자가 다시 웹 서버에 요청을 제출할 때 확인을 위해 사용자의 관련 정보가 기록될 수 있습니다.

예: 사용자가 전자상거래 웹사이트를 탐색할 때 세션이 없다면 사용자는 탐색할 때마다 계정 비밀번호를 입력해야 합니다.

관련 주제 추천: php 세션 (사진, 텍스트, 동영상, 사례 포함)

1, 세션 임시 파일

서버에서 모든 사용자 세션이 임시 디렉터리에 저장되는 경우 , 서버의 보안과 효율성이 저하됩니다. 서버에 저장된 사이트를 여는 것은 매우 느립니다.

PHP 함수 session_save_path() 함수를 사용하여 세션 임시 파일을 저장하면 임시 파일 저장으로 인해 발생하는 서버 효율성 저하 및 사이트 열기 속도 저하 문제를 완화할 수 있습니다.

샘플 코드는 다음과 같습니다.

<?php
$path ="./tmp/";    //设置session存储的路径
session_save_path($path);
session_start();
$_SESSION[&#39;userName&#39;]=true;
?>

참고

session_save_path()는 session_start()보다 먼저 실행되어야 합니다.

2, 세션 캐싱

세션 캐싱은 웹 페이지의 콘텐츠를 IE 클라이언트의 Temporary INternet Files 폴더에 임시 저장하는 것으로, 캐시 시간을 설정할 수 있습니다.

세션 캐시는 session_cache_limiter() 함수를 사용하며 그 구문은 다음과 같습니다.

string session_cache_limiter([string cache_limiter]);

cache_limiter 매개변수는 공개 또는 비공개입니다. 동료 세션은 서버 측이 아니라 클라이언트 측에 있습니다. 서버에는 표시되지 않습니다.

캐시 시간을 설정하려면 session_cache_expire() 함수를 사용하세요. 구문은 다음과 같습니다.

int session_cache_expire([int new_cahche_expire]);

매개변수 new_cahche_expire는 세션 캐시의 시간(분)입니다.

참고:

이 두 세션 함수는 session_start() 함수 이전에 실행되어야 합니다.

세션 캐시 페이지의 샘플 코드는 다음과 같습니다.

<?php

session_cache_limiter("private");
$cache_limit =session_cache_limiter();   //开启客户端缓存
echo "缓存限制为:".$cache_limit."\n";
session_cache_expire(30);
$cache_expire = session_cache_expire();  //设定客户端缓存时间
echo "客户端缓存时间为:".$cache_expire."分钟\n";
session_start();

?>

실행 결과는 다음과 같습니다.

PHP 세션 적용에 대한 자세한 설명

3, 세션 데이터베이스 저장

PHP에서 세션의 데이터베이스 저장은 주로 session_set_save_handler() 함수를 통해 구현됩니다. 구체적인 구문은 다음과 같습니다.
bool session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)

PHP 세션 적용에 대한 자세한 설명

다음은 이러한 6개의 매개변수(함수)로 구분됩니다. 당신은 배우고 있습니다. 객체 지향 프로그래밍을 마치면 모든 사람이 더 명확하게 이해하게 될 것입니다.

(1) session_open() 함수를 캡슐화합니다. 코드는 다음과 같습니다.

function _session_open($save_path,$session_name){
global $handle;
$handle =mysql_connect(&#39;localhost&#39;,&#39;root&#39;,&#39;root&#39;)or die(&#39;数据库连接失败!&#39;);
mysql_select_db(&#39;db_database11&#39;,$handle)or die(&#39;数据库不存在&#39;);
return(true);
}

(2) session_close() 함수를 캡슐화합니다. 코드는 다음과 같습니다.

function _session_close(){
global $handle;
mysql_close($handle);
return(true);
}

(3) session_read() 함수를 캡슐화합니다. , UNIX 타임스탬프 기능에서 현재 시간을 설정하고 $key를 기반으로 세션 명함 및 콘텐츠를 검색합니다. 코드는 다음과 같습니다.

function _session_read($key){
golbal $handle;     //全局变量$handle 连接数据库
$time =time();     //设定当前时间
$sql ="select session_data from tb_session where session_key = &#39;$key&#39; and session_time>&#39;$time&#39;";
$result =mysql_query($ssql,$handle);
$row =mysql_fetch_array($result);
if($row){
return($row[&#39;session_data&#39;]);
}else{
return(false);
}
}

(4) session_write() 함수를 캡슐화합니다. 이 함수는 세션의 만료 시간을 설정하고 쿼리 결과가 비어 있는 경우 세션의 이름과 내용을 찾습니다. 그런 다음 session_id, session_name 및 만료 시간을 기반으로 페이지의 세션을 데이터베이스에 삽입합니다. 쿼리 결과가 비어 있지 않으면 $key를 기준으로 데이터베이스의 Session 저장소 정보를 수정합니다. 코드는 다음과 같습니다:

function _session_write($key,$data){
global $handle;
$time = 60*60;
$lapse_time =time()+$time;   //得到UNIX时间戳
$sql = "select session_data from tb_session where session_key =&#39;$key&#39; and session_time>$lapse_time";
$result =mysql_query($sql,$handle);
if(mysql_num_rows($result)==0){  //没有结果
$sql ="insert into tb_session values(&#39;$key&#39;,&#39;$data&#39;,$lapse_time)";
$result =mysql_query($sql,$handle);
}else{
$sql ="update tb_session set session_key=&#39;$key&#39;,session_data =&#39;$data&#39;,session_time =$lapse_time where session_key =&#39;$key&#39;";
$result =mysql_query($sql,$handle);
}
return($result);
}

(5) session_destroy()를 캡슐화하고 $key를 기반으로 데이터베이스에서 Sessin을 삭제합니다. 코드는 다음과 같습니다.

function _session_destroy(){
global $handle;
$sql ="delete from tb_session where session_key =&#39;$key&#39;";
$result =mysql_query($sql,$handle);
}

(6) session_gc()를 캡슐화하고 만료된 세션을 기반으로 삭제합니다. 세션 만료 시간에 대한 샘플 코드는 다음과 같습니다.

functin _session_gc($expiry_time){
global $handle;
$sql ="delete from tb_session where session_expiry_time<$expiry_time";
$result =mysql_query($sql,$handle);
return($result);
}

구체적인 코드 실행은 하지 않겠습니다. 객체지향 프로그래밍 학습이 끝나면 보여드리겠습니다.

위 내용은 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다.

관련 권장사항:

php 및 codeigniter에서는 session-쿠키를 자세히 사용합니다.

위 내용은 PHP 세션 적용에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.