>  기사  >  데이터 베이스  >  Redis를 사용하여 사용자 세션을 저장하는 방법에 대한 자세한 설명

Redis를 사용하여 사용자 세션을 저장하는 방법에 대한 자세한 설명

coldplay.xixi
coldplay.xixi앞으로
2020-07-30 10:57:043177검색

Redis를 사용하여 사용자 세션을 저장하는 방법에 대한 자세한 설명

서문

PHP에 내장된 그림 저장 메커니즘은 모든 세션 데이터를 서버의 텍스트 파일로 저장합니다. 이러한 파일은 일반적으로 서버의 임시 디렉터리에 저장됩니다. 동시성 양이 많으면 읽기 및 쓰기 효율성이 매우 낮습니다. Redis는 높은 동시성을 매우 잘 지원하므로 Redis를 사용하여 파일 저장 세션을 대체할 수 있습니다.

관련 주제 추천: php session(사진, 동영상, 사례 포함)

session_set_save_handler 함수

PHP의 session_set_save_handler 함수는 사용자 수준 세션 저장 함수(예: 열다 , 마무리, 쓰기 등). 프로토타입은 다음과 같습니다:

bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)

Parameters Description
open 언제 세션이 열려 있습니다. 이 함수를 호출하세요. 두 개의 파라미터를 전달받으며, 첫 번째 파라미터는 세션을 저장할 경로, 두 번째 파라미터는 세션 이름입니다. 이 콜백 함수는 작업이 성공하면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.
close 세션 작업이 완료되면 호출되는 함수입니다. 매개변수를 받지 않습니다. 이 콜백 함수는 작업이 성공하면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.
read 은 세션 ID를 매개변수로 사용합니다. 세션 ID를 통해 데이터 저장자로부터 데이터를 얻어서 이 데이터를 반환합니다. 데이터가 비어 있으면 빈 문자열이 반환될 수 있습니다. 이 함수는 session_start를 호출하기 전에 트리거됩니다.
write 데이터가 저장될 때 호출됩니다. 두 개의 매개변수가 있는데 하나는 세션 ID이고 다른 하나는 세션 데이터
destroy session_destroy 함수가 호출되면 destroy 함수가 트리거됩니다. 매개변수는 세션 ID 하나만 있습니다. 이 콜백 함수는 작업이 성공하면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.
gc PHP가 세션 가비지 수집 메커니즘을 실행할 때 트리거됩니다. 이 콜백 함수는 작업이 성공하면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.

세션 관리 클래스

PHP 구성 파일 php.ini를 찾아 다음 내용으로 수정한 후 저장하고 php-fpm 서비스를 다시 시작합니다.

session.save_handler = redis

세션을 관리하는 클래스를 작성합니다:

<?php 
class SessionManager{

 private $redis;
 private $sessionSavePath;
 private $sessionName;
 private $sessionExpireTime = 60;//redis,session的过期时间为30s

 public function __construct(){
 $this->redis = new Redis();//创建phpredis实例
 $this->redis->connect(&#39;127.0.0.1&#39;, 6379);//连接redis
 //$this->redis->auth("123456x");//授权
 $retval = session_set_save_handler(
 array($this,"open"),
 array($this,"close"),
 array($this,"read"),
 array($this,"write"),
 array($this,"destroy"),
 array($this,"gc")
 );
 session_start();
 }

 public function open($path,$name){
 return true;
 }

 public function close(){
 return true;
 }

 public function read($id){
 $value = $this->redis->get($id);//获取redis中的指定记录
 if($value){
 return $value;
 }else{
 return &#39;&#39;;
 }
 }

 public function write($id,$data){
 if($this->redis->set($id,$data)){//以session ID为键,存储
 $this->redis->expire($id,$this->sessionExpireTime);//设置redis中数据的过期时间,即session的过期时间
 return true;
 }

 return false;
 }

 public function destroy($id){
 if($this->redis->delete($id)){//删除redis中的指定记录
 return true;
 }
 return false;
 }

 public function gc($maxlifetime){
 return true;
 }

 public function __destruct(){
 session_write_close();
 }
}

SessionManager 생성자는 주로 Redis 서버에 연결하는 데 사용되며, session_set_save_handler函数设置session回调函数,并调用session_start 함수를 사용하여 세션 기능을 활성화합니다. 이 예제의 open, close 및 gc 콜백 함수는 그다지 유용하지 않기 때문에 true를 직접 반환합니다.

쓰기 콜백 함수에서 세션 ID를 키로 사용하고, 세션 데이터를 Redis 서버에 값으로 저장하고, 세션 만료 시간을 30초로 설정합니다. 읽기 콜백 함수에서 세션 ID를 키로 사용하여 Redis 서버에서 데이터를 읽고 이 데이터를 반환합니다. destroy 콜백 함수에서는 세션 ID를 redis 서버에서 해당 세션 데이터를 삭제하기 위한 키로 사용합니다.

세션 사용

먼저 세션을 설정하기 위해 set.php 파일을 생성하세요:

<?php 
require_once &#39;SessionManager.php&#39;;
new SessionManager();
$_SESSION[&#39;username&#39;] = &#39;helloweba&#39;;

그런 다음 세션을 얻기 위해 get.php 파일을 생성하세요:

<?php 
require_once &#39;SessionManager.php&#39;;
new SessionManager();
echo $_SESSION[&#39;username&#39;];

분명히 우리는 세션 관리 첫 번째 클래스를 포함합니다 , 인스턴스화 후 PHP의 일반 세션 기능을 사용할 수 있습니다.

테스트할 때 먼저 set.php에 액세스한 다음 get.php에 액세스합니다. 출력 결과는 다음과 같습니다.

마지막으로 redis로 이동하여 결과를 확인합니다.

관련 학습 권장 사항 : redis 비디오 튜토리얼

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

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제