Redis 를 사용 하여 사용자 세 션 을 저장 하 는 방법
PHP 에 내 장 된 그림 저장 체 제 는 모든 세 션 데 이 터 를 서버 의 텍스트 파일 에 저장 하 는 것 입 니 다.이 파일 들 은 보통 서버 의 임시 디 렉 터 리 에 저 장 됩 니 다.병발 량 이 많 으 면 읽 기와 쓰기 효율 이 매우 낮다.레 디 스 는 높 은 병발 에 대한 지원 이 좋 기 때문에 파일 대신 redis 를 사용 하여 session 을 저장 할 수 있 습 니 다.
원본 코드 다운로드
session_set_save_handler 함수
PHP 의 sessionset_save_handler 함 수 는 사용자 급 session 저장 함 수 를 정의 합 니 다(예 를 들 어 열기,닫 기,쓰기 등).원형 은 다음 과 같다.
bool session_set_save_hanler(callback open,callback close,callback read,callback write,callback destory,callback gc)
매개 변수
묘사 하 다.
open
session 이 열 렸 을 때 이 함 수 를 호출 합 니 다.두 개의 인 자 를 받 습 니 다.첫 번 째 인 자 는 session 의 경 로 를 유지 하 는 것 이 고 두 번 째 인 자 는 session 의 이름 입 니 다.이 반전 함 수 는 TRUE 를 성공 적 으로 되 돌려 주 었 고,반대로 FALSE 를 되 돌려 주 었 습 니 다.
close
session 작업 이 끝 났 을 때 이 함 수 를 호출 합 니 다.인 자 를 받 지 않 습 니 다.이 반전 함 수 는 TRUE 를 성공 적 으로 되 돌려 주 었 고,반대로 FALSE 를 되 돌려 주 었 습 니 다.
read
session ID 를 매개 변수 로 합 니 다.session ID 를 통 해 데이터 저장 소 에서 데 이 터 를 얻 고 이 데 이 터 를 되 돌려 줍 니 다.데이터 가 비어 있 으 면 빈 문자열 을 되 돌려 줄 수 있 습 니 다.이 함수 가 session 을 호출 하고 있 습 니 다.start 전 트리거
write
데이터 저장 시 호출.두 개의 인자 가 있 는데 하 나 는 session ID 이 고 다른 하 나 는 session 의 데이터 입 니 다.
destroy
호출 sessiondestroy 함수 시 destroy 함 수 를 촉발 합 니 다.매개 변수 session ID 만 있 습 니 다.이 반전 함수 작업 은 TRUE 로 성공 적 으로 되 돌아 가 고 반대로 FALSE 로 되 돌아 갑 니 다.
gc
php 가 session 쓰레기 수 거 메커니즘 을 실행 할 때 터치 합 니 다.이 리 셋 함 수 는 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('127.0.0.1', 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 '';
}
}
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 함수 가 session 기능 을 엽 니 다.이 예 에서 open,close,gc 반전 함수 의 역할 이 크 지 않 기 때문에 true 로 직접 돌아 갑 니 다.write 리 셋 함수 에 서 는 session ID 를 key 로 하여 session 의 데 이 터 를 value 로 redis 서버 에 저장 하고 session 의 만 료 시간 을 30 초 로 설정 합 니 다.read 답장 에서 session ID 를 key 로 하여 redis 서버 에서 데 이 터 를 읽 고 이 데 이 터 를 되 돌려 줍 니 다.destroy 리 셋 함수 가 무 거 우 면 session ID 를 key 로 하여 redis 서버 에서 해당 하 는 session 데 이 터 를 삭제 합 니 다.
세 션 사용
세 션 을 설정 하기 위해 set.php 파일 을 만 듭 니 다.
<?php
require_once 'SessionManager.php';
new SessionManager();
$_SESSION['username'] = 'helloweba';
그리고 get.php 파일 을 만들어 세 션 을 가 져 옵 니 다:
<?php
require_once 'SessionManager.php';
new SessionManager();
echo $_SESSION['username'];
우리 가 먼저 session 관리 류 를 포함 한 후에 실례 화 된 후에 PHP 의 정상 적 인 session 함 수 를 사용 할 수 있 음 이 분명 하 다.테스트 할 때,먼저 set.php 를 방문 한 다음 에 get.php 를 방문 합 니 다.출력 결 과 는 다음 과 같 습 니 다.
마지막 으로,우 리 는 redis 에 가서 결 과 를 봅 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redis 해시에 대한 완벽한 가이드변경 가능하므로 필요에 따라 쉽게 변경하고 업데이트할 수 있습니다. Redis 해시는 구조가 평평하므로 JSON에서와 같이 여러 수준을 가질 수 없습니다. redis 해시의 명명 규칙은 hash:key 로 입력되므로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.