Memcached 드라이버만 사용하여 세션 ID를 다시 생성할 때 CodeIgniter 3 세션이 손실됨
P粉356361722
2023-08-31 17:14:45
<p>저는 CodeIgniter 3 프레임워크를 사용하여 장기 실행 프로젝트를 개발하고 있습니다. 몇 달 동안 세션이 무작위로 손실되는 문제가 발생했습니다. 프레임워크 파일을 최신 버전(3.1.13)으로 업데이트했습니다. 이로 인해 개발 서버의 문제가 해결된 것처럼 보이지만 프로덕션 환경에서는 여전히 문제가 존재합니다. 그러나 이제 이 문제는 응답이 새 세션 쿠키를 보낼 때만 발생하며, 이는 세션 ID가 다시 생성될 때 발생한다는 것을 알았습니다. <code>$config['sess_time_to_update']</code>를 변경하면 필요한 시간이 올바르게 반영됩니다. </p>
<p>개발 서버와 프로덕션 서버의 차이점은 세션 드라이버입니다. 세션 드라이버는 개발 서버에 있는 파일인 반면 프로덕션에서는 memcached를 사용합니다. 그래서 실험을 하고 드라이버를 파일로 전환했는데 세션이 더 이상 손실되지 않았습니다. 또한 Redis 드라이버로 설정을 시도했지만 문제가 발생하지 않았습니다. 따라서 Memcached 드라이버에 문제가 있는 것 같습니다. 하지만 나는 다른 사람과 거래하고 싶지 않습니다. 로그에 오류가 없습니다. 또한 php.ini 파일과 memcached 변수가 모두 기본값으로 되어 있는지 확인했습니다. </p>
<p>CodeIgniter v3.1.13, PHP 7.4.3, Memcached용 Amazon ElastiCache</p>
<p>구성은 다음과 같습니다.</p>
<pre class="brush:php;toolbar:false;">$config['sess_driver'] = 'memcached';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 14400;
$config['sess_save_path'] = 'host.com:11211';
$config['sess_match_ip'] = 거짓;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = 거짓;</pre>
<p>어디를 봐야 할지, 무엇을 확인해야 할지 알려주시면 감사하겠습니다. </p>
이 답변을 확인하세요. 분명히 이 문제는 세션의 최대 만료 시간을 memcached의 만료 제한보다 크게 설정하면 발생할 수 있습니다. 해당 게시물에서 OP는 다음 구성 변수를 수정하여 문제를 해결했습니다. 시도해 볼 수 있습니다.
으아악또 다른 옵션은
memcached
并使用内存驻留sqlite3
데이터베이스를 제거하고 이를 세션 저장소로 교체하는 것입니다. 두 경우 모두 프로덕션 성능이 크게 다르지 않을 것이라고 생각합니다.AWS ElastiCache Memcached 클러스터를 사용하는 경우 구성에서 사용 중인 엔드포인트를 확인하세요
$config['sess_save_path']
。一种选择是使用配置端点(其中包含.cfg.
),另一种选项是单个节点端点(包含.0001.
、.0002.
등). 구성 엔드포인트를 사용하는 경우 자동 검색이 활성화되어 있는지 확인하세요(서버에 추가 설치 필요 - PHP용 ElastiCache 클러스터 클라이언트). 활성화하지 않으면 노드가 올바르게 해결되지 않아 이와 같은 문제가 발생합니다.나도 그랬다는 사실이 밝혀졌다. 세션 start, regenerate 및 destroy에서 메시지 로깅을 시도했는데 파일 드라이버를 사용하면 재생성이 발생하는 반면 memcached를 사용하면
. 설정이 어떻게 작동하는지 잘 모르겠습니다. 그래서session_start()
함수 이외의 어떤 함수도 호출하지 않습니다. 이것 말고도 . 몇 가지 조사 끝에 호스트를 다시 확인하기로 결정했고 우연히 를 발견했습니다. AWSsession_start()
之外的任何函数。经过一番调查后,我决定重新检查主机并偶然发现 这个AWS 中的指南。事实证明,在问题开始时,第二个节点已添加到我们的 Memcached 集群中,但我们一直在使用配置端点,而没有设置此 自动发现。我根本不确定设置是如何工作的。因此,我将$config['sess_save_path']
가이드. 문제가 시작되었을 때 두 번째 노드가 Memcached 클러스터에 추가되었지만 우리는 이 자동 검색$config['sess_save_path']
를 노드 중 하나의 끝점으로 변경했더니 문제가 사라졌습니다. 이 솔루션은 필요한 모듈을 설치 및 설정할 때까지, 그리고 노드가 변경되지 않는 한 작동해야 합니다. 🎜