English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
PHP에서는 $_SESSION을 사용하여 session을操作하며, ThinkPHP는 session() 함수를 제공합니다. 단 하나의 함수로 session의 추가, 제거, 변경, 검색 기능을 모두 구현합니다. 아래에서는 이 함수의 사용과 구현을 각각 설명합니다.
session() 함수의 정의는 Common에 있습니다./functions.php에서 정의됩니다.
session 설정
session($name='',$value='') 함수는 두 가지 매개변수를 가지며, $name이 배열이면 session을 설정하는 것입니다. 다음과 같이 사용됩니다:
$name = array( ‘name'=>'name', ‘path'=>'/tmp/', ‘expire'=>0 ); session($name);
이들은 session을 시작하기 전에 설정되는 것들입니다. ThinkPHP에서 함수를 정의할 때는 먼저 $name이 배열인지 확인하고, 배열이면 session을 설정하는 것을 의미하며, 그 다음에 해당 코드를 실행합니다.
구현 코드는 다음과 같습니다:
if(is_array($name)) { // session 초기화는 session_start 전에 호출됩니다; if(isset($name['prefix'])) C('SESSION_PREFIX',$name['prefix']); if(C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])){ session_id($_REQUEST[C('VAR_SESSION_ID')]); }elseif(isset($name['id'])) { session_id($name['id']); } if('common' != APP_MODE){ // 기타 모드는 지원되지 않을 수 있습니다; ini_set('session.auto_start', 0); } if(isset($name['name'])) session_name($name['name']); if(isset($name['path'])) session_save_path($name['path']); if(isset($name['domain'])) ini_set('session.cookie_domain', $name['domain']); if(isset($name['expire'])) { ini_set('session.gc_maxlifetime', $name['expire']); ini_set('session.cookie_lifetime', $name['expire']); } if(isset($name['use_trans_sid'])) ini_set('session.use_trans_sid',$name['use_trans_sid']?1:0); if(isset($name['use_cookies'])) ini_set('session.use_cookies', $name['use_cookies']?1:0); if(isset($name['cache_limiter'])) session_cache_limiter($name['cache_limiter']); if(isset($name['cache_expire'])) session_cache_expire($name['cache_expire']); if(isset($name['type'])) C('SESSION_TYPE',$name['type']); …… }
ThinkPHP에서는 세션 저장 시스템에 대해 mysql과 memcache 두 가지 데이터베이스를 제공합니다.当然了, 기본적으로는 파일 저장을 사용합니다. 세션 저장 방식을 판단하는 코드는 다음과 같습니다:
if(C('SESSION_TYPE')) { // 세션 드라이버 읽기 $type = C('SESSION_TYPE'); //시스템 호출 mysql 드라이버 $class = strpos($type,'\\')? $type : 'Think\\Session\\Driver\\'. ucwords(strtolower($type)); $hander = new $class(); //프로세서 인스턴스화 //处理器 등록 session_set_save_handler( array(&$hander, "open"), array(&$hander, "close"), array(&$hander, "read"), array(&$hander, "write"), array(&$hander,"destroy"), array(&$hander,"gc") ); }
session 저장 시스템의 구성은 설정 옵션 SESSION_TYPE를 통해 설정됩니다.
SESSION_TYPE=>'Mysql' //session을 mysql 데이터베이스에 저장합니다
설정이 완료된 후 session 자동 시작이 설정되면 시스템이 자동으로 session을 시작합니다
// session 시작 if(C('SESSION_AUTO_START')) session_start();
session 자동 시작을关闭하려면, 옵션 SESSION_AUTO_START를 다음과 같이 설정합니다:
SESSION_AUTO_START => false
시스템 자동 시작을关闭한 경우, 프로젝트의 공용 파일이나 컨트롤러에서 session_start()를 수동으로 호출하여 session을 시작할 수 있습니다. 또는 함수 session()를 사용하여 시작 방법은 다음과 같습니다:
session(‘[start]’);
ThinkPHP에서의 구현 코드는 다음과 같습니다:
if('[pause]'==$name){ // session 일시 중지 session_write_close(); }elseif('[start]'==$name){ // session 시작 session_start(); }elseif('[destroy]'==$name){ // session을 소멸시키기 $_SESSION = array(); session_unset(); session_destroy(); }elseif('[regenerate]'==$name){ // ID 재생성 session_regenerate_id(); }
session 값 설정
session 값 설정은 매우 간단합니다. 직접 사용하세요:
session('name','onmpw');
또한 키 값은 '.'로 연결된 여러 층으로 설정할 수 있습니다.
session(‘name1.name2','onmpw'); //와 동일합니다: $_SESSION[‘name1'][‘name2'] = 'onmpw';
ThinkPHP에서 session 값 설정의 구현 코드는 다음과 같습니다:
if(strpos($name,'.')){ list($name1,$name2) = explode('.',$name); if($prefix){ $_SESSION[$prefix][$name1[$name2] = $value; }else{ $_SESSION[$name1[$name2] = $value; } }else{ if($prefix){ $_SESSION[$prefix][$name] = $value; }else{ $_SESSION[$name] = $value; } }
prefix는 옵션 SESSION_PREFIX를 통해 설정됩니다.
session 값을 가져오기
session 값을 가져오는 것은 상대적으로 간단합니다.
먼저 전체 session을 가져오는 방법은 다음과 같습니다.
$values = session();
이 경우 배열을 얻습니다. ThinkPHP에서의 구현 코드는 다음과 같습니다:
if(''===$name){ // 전체 session을 가져오기 return $prefix ? $_SESSION[$prefix] : $_SESSION; }
그리고 단일 값을 꺼내는 것도 있습니다
$value1 = session('name'); //또는 $value2 = session('name1.name2');
구현 코드는 다음과 같습니다:
if(strpos($name,'.')){ list($name1,$name2) = explode('.',$name); return isset($_SESSION[$name1[$name2])?$_SESSION[$name1[$name2:null; }else{ return isset($_SESSION[$name])?$_SESSION[$name]:null; }
session 지우기
session의 지우기는 session을 비우기, session을 소멸시키기 및 단일 session 값을 지우기로 나뉩니다.
먼저 session을 비우는 것에 대해 설명하겠습니다. session을 비우기는 $name에 null 값을 전달합니다
session(null); //session을 비우기
구현 코드는 다음과 같습니다:
if(is_null($name)){ // session을 비우기 if($prefix) { unset($_SESSION[$prefix]); }else{ $_SESSION = array(); } }
session을 비우는 것은 session에 해당하는 파일이나 테이블의 데이터를 지우지만 파일은 존재할 것입니다.
session을 소멸시키기
session('[destroy]');
ThinkPHP에서의 구현 코드는 다음과 같습니다:
if('[destroy]'==$name){ // session을 소멸시키기 $_SESSION = array(); session_unset(); session_destroy(); }
session을 소멸시키는 것과 session을 비우는 것의 차이는 소멸시키는 것이 파일을 모두 소멸시키는 것입니다.
마지막으로 단일 session 값을 지우는 방법은 다음과 같습니다.
session('name',null);
단일 session 값을 지우기 위해 두 번째 매개변수 $value의 값을 null로 설정하면 됩니다.
if(is_null($value)){ // session을 지우기 if(strpos($name,'.')){ list($name1,$name2) = explode('.',$name); if($prefix){ unset($_SESSION[$prefix][$name])1[$name2]); }else{ unset($_SESSION[$name])1[$name2]); } }else{ if($prefix){ unset($_SESSION[$prefix][$name]); }else{ unset($_SESSION[$name]); } } }
session 확인
마지막으로 session의 확인에 대해 간단히 설명합니다. 확인은 변수가 존재하는지 확인하는 것입니다. 원시적인 PHP는 session 변수를 확인하는 방식은 다음과 같습니다
isset($_SESSION[‘name']);
ThinkPHP가 포장한 후 session() 함수를 사용하여 이렇게 확인합니다
session(‘?name'); //session이 이미 설정되었는지 확인합니다
그 코드 구현도 원시적인 검사 방식을 사용합니다
$name = substr($name,1); if(strpos($name,'.')){ // 지원 배열 list($name1,$name2) = explode('.',$name); return $prefix?isset($_SESSION[$prefix][$name1[$name2]:isset($_SESSION[$name1[$name2]); }else{ return $prefix?isset($_SESSION[$prefix][$name]):isset($_SESSION[$name]); }
이 부분은 session() 함수의 모든 기능에 대한 소개와 ThinkPHP가 어떻게 구현하는지에 대해 대략적으로 설명합니다. 이 문서의 내용이 ThinkPHP를 사용하는 과정에서 도움이 되길 바랍니다.
선언: 이 문서의 내용은 인터넷에서 가져왔으며, 저작권자는 누구인지 알 수 없으며, 인터넷 사용자가 자발적으로 기여하고 업로드한 내용입니다. 이 사이트는 소유권을 가지지 않으며, 인공 편집을 하지 않았으며, 관련 법적 책임도 부담하지 않습니다. 저작권 문제가 의심되는 내용이 있으면 notice#w로 이메일을 보내 주세요.3codebox.com(보내는 이메일에서 #을 @으로 변경하십시오. 신고하고 관련 증거를 제공하시면, 사이트가 의심스러운 저작권 내용을 즉시 삭제합니다。)