php 세션 유효하지 않은 분석
PHP 개발 과정에서 일부 친구들은 세션에서 생성된 파일이 자동으로 지워지지 않는 문제에 자주 직면할 수 있습니다. 삭제하는 것은 실제로 불가능하지만 사이트에 트래픽이 충분히 많으면 해당 파일은 자동으로 삭제될 수 있습니다. 방문 횟수가 상대적으로 적고 파일이 보기에 좋지 않은 경우 php.ini에서 구성하여 세션 파일의 자동 삭제를 실현할 수 있습니다. 구체적인 구성은 다음과 같습니다.
찾기
session.gc_probability = 1 session.gc_pisor = 1000
위의 두 매개변수는 실제로 이 확률이며 기본값은 1/1000입니다
session.gc_pisor = 1000을 session.gc_pisor = 100으로 변경
완전한 실제를 달성하려면 -time, 그러면 이 매개변수를 1로 변경할 수 있으므로 확률은 100%입니다.
세션 작동 방식 보기
개요: 모든 PHP 요청의 확률은 1/100입니다(기본값 ) "세션 재활용"을 트리거합니다. "세션 재활용"이 발생하면 /tmp/sess_* 파일이 확인됩니다. 마지막 수정 시간이 1440초(gc_maxlifetime 값)를 초과하면 삭제되며, 이는 해당 세션이 만료되었음을 의미합니다.
1. 서버 측(보통 Apache와 PHP 모듈)에 세션이 어떻게 존재하나요?
기본적으로 PHP는 세션을 /tmp 디렉터리에 저장하며 파일 이름은 sess_01aab840166fd1dc253e3b4a3f0b8381과 같습니다. 각 파일은 세션에 해당합니다.
more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381 username|s:9:”jiangfeng”;admin|s:1:”0〃;
#변수명|유형: 길이:값
여기서 세션 파일을 삭제하면 해당 세션이 유효하지 않다는 의미입니다.
2. 클라이언트 측(보통 브라우저)에서는 세션이 어떻게 존재하나요?
세션은 브라우저 측에 있으므로 세션 ID(서버 측에서 생성된 고유 ID)만 저장하면 됩니다. 저장하는 방법에는 쿠키와 URL의 두 가지가 있습니다. 쿠키에 세션ID가 저장되어 있으면 브라우저의 쿠키에 PHPSESID 변수가 있는 것을 확인할 수 있습니다. URL로 전달되면
index.php?PHPSESID=01aab840166fd1dc253e3b4a3f0b8381 형식의 URL을 볼 수 있습니다. (서버 측에서는 session.use_cookies를 사용하여 어떤 메소드를 사용할지 제어합니다.)
3. 서버 측에서 PHP는 세션 파일이 만료되었는지 어떻게 확인합니까?
"현재"에 대한 "마지막 수정 시간"이 gc_maxlifetime(기본값은 1440)초를 초과하는 경우 이 세션 파일은 다음 세션이 재활용될 때 만료된 것으로 간주됩니다. 변경되지 않으면 세션 파일이 삭제됩니다(세션이 만료됩니다).
간단히 말하면, 웹사이트에 로그인하고 1440초(기본값) 이내에 아무런 조작이 없으면 해당 세션이 만료된 것으로 간주됩니다.
따라서 php.ini 파일에서 gc_maxlifetime 변수를 수정하면 세션 만료 시간이 연장될 수 있습니다. (예를 들어 만료 시간을 86400초로 수정합니다.)
session.gc_maxlifetime = 86400
그런 다음 웹 서비스(일반적으로 Apache)를 다시 시작하세요.
참고: php5에서는 세션 만료가 재활용 메커니즘을 사용합니다. 여기에 설정된 시간은 86400초입니다. 86400초 이내에 세션이 수정되지 않으면 다음 "재활용"까지 삭제되지 않습니다.
4. 세션 '재활용'은 언제 발생하나요?
기본적으로 모든 PHP 요청에 대해 재활용 확률은 1/100이므로 간단히 "100개의 PHP 요청마다 한 번의 재활용이 발생한다"고 간단히 이해하면 됩니다. 이 확률은 다음 매개변수
#概率是gc_probability/gc_pisor session.gc_probability = 1 session.gc_pisor = 100
에 의해 제어됩니다. 참고 1: 이 경우 gc_maxlifetime=120, 세션 파일이 120초 전에 마지막으로 수정된 경우 다음 재활용( 1/100 확률)이 발생하더라도 이 세션은 여전히 유효합니다.
참고 2: 세션이 session.save_path를 사용하여 세션을 다른 곳에 저장하는 경우 세션 재활용 메커니즘이 만료된 세션 파일을 자동으로 처리하지 못할 수 있습니다. 이때 만료된 세션을 정기적으로 수동(또는 crontab)으로 삭제해야 합니다.
cd /path/to/sessions; find -cmin +24 | xargs rm
5. 일부 특수한 경우
메커니즘은 파일의 "마지막 수정 시간"을 확인하므로 세션이 활성화되어 있지만 세션 내용이 변경되지 않은 경우 해당 세션 파일은 변경되지 않았으며 재활용 메커니즘은 이를 다음과 같은 세션으로 간주합니다. 오랫동안 활동하지 않았습니다. 삭제하세요. 이는 우리가 보고 싶지 않은 사항입니다. 다음과 같은 간단한 코드를 추가하면 이 문제를 해결할 수 있습니다.
<?php if(!isset($_SESSION['last_access'])||(time()-$_SESSION['last_access'])>60) $_SESSION['last_access'] = time(); ?>
코드는 60초마다 세션 수정을 시도합니다.
요약: 세션 만료 시간을 수정하려면 gc_maxlifetime 변수를 수정하면 됩니다. PHP5의 세션은 수동적 재활용 메커니즘(가비지 수집)을 사용합니다. 만료된 세션 파일은 저절로 사라지지 않지만, 만료된 세션은 "재활용"을 트리거하여 처리됩니다.
세션 시간 설정과 관련된 몇 가지 다른 문제를 자세히 살펴보겠습니다
세션 만료 시간 매개변수
만료 시간 매개변수를 설정합니다. 주로 설정합니다. session.gc_maxlifetime의 매개변수를 안전하게 설정하려면 다음 두 매개변수를 설정하세요.
ini_set('session.cookie_lifetime', 0); // 可用 print_r(session_get_cookie_params()); 观察 ini_set('session.gc_maxlifetime', 3600); // 可用 echo ini_get("session.gc_maxlifetime"); 观察
session_cookie_lifetime 设为 0 的话, 代表等到 browser 才把此 cookie 清掉.(session 和 browser cookie 是有相关的)
如果懒得想这些, 直接用下面的 function 就可以了
Session 过期时间程式
<?php function start_session($expire = 0) { if ($expire == 0) { $expire = ini_get('session.gc_maxlifetime'); } else { ini_set('session.gc_maxlifetime', $expire); } if (empty($_COOKIE['PHPSESSID'])) { session_set_cookie_params($expire); session_start(); } else { session_start(); setcookie('PHPSESSID', session_id(), time() + $expire); } } ?>
使用方式
于程式最上方加入: start_session(600); // 代表 600 秒后会过期 (取代原本 session_start())
如果要再延长过期时间, 只要再做修改即可.
但是有个问题要注意, 就是 PHP 的 session 预设是存成 file, 所以 /tmp 可能会因这样设定而爆掉(档案太多), 通常解法是把 session 存进 DB/memcache 中.
以上就是php Session无效分析资料整理的详解的内容,更多相关内容请关注PHP中文网(www.php.cn)!

데이터베이스 스토리지 세션 사용의 주요 장점에는 지속성, 확장 성 및 보안이 포함됩니다. 1. 지속성 : 서버가 다시 시작 되더라도 세션 데이터는 변경되지 않아도됩니다. 2. 확장 성 : 분산 시스템에 적용하여 세션 데이터가 여러 서버간에 동기화되도록합니다. 3. 보안 : 데이터베이스는 민감한 정보를 보호하기 위해 암호화 된 스토리지를 제공합니다.

SessionHandlerInterface 인터페이스를 구현하여 PHP에서 사용자 정의 세션 처리 구현을 수행 할 수 있습니다. 특정 단계에는 다음이 포함됩니다. 1) CustomsessionHandler와 같은 SessionHandlerInterface를 구현하는 클래스 만들기; 2) 인터페이스의 방법 (예 : Open, Close, Read, Write, Despare, GC)의 수명주기 및 세션 데이터의 저장 방법을 정의하기 위해 방법을 다시 작성합니다. 3) PHP 스크립트에 사용자 정의 세션 프로세서를 등록하고 세션을 시작하십시오. 이를 통해 MySQL 및 Redis와 같은 미디어에 데이터를 저장하여 성능, 보안 및 확장 성을 향상시킬 수 있습니다.

SessionId는 웹 애플리케이션에 사용되는 메커니즘으로 사용자 세션 상태를 추적합니다. 1. 사용자와 서버 간의 여러 상호 작용 중에 사용자의 신원 정보를 유지하는 데 사용되는 무작위로 생성 된 문자열입니다. 2. 서버는 쿠키 또는 URL 매개 변수를 통해 클라이언트로 생성하여 보낸다. 3. 생성은 일반적으로 임의의 알고리즘을 사용하여 독창성과 예측 불가능 성을 보장합니다. 4. 실제 개발에서 Redis와 같은 메모리 내 데이터베이스를 사용하여 세션 데이터를 저장하여 성능 및 보안을 향상시킬 수 있습니다.

JWT 또는 쿠키를 사용하여 API와 같은 무국적 환경에서 세션을 관리 할 수 있습니다. 1. JWT는 무국적자 및 확장 성에 적합하지만 빅 데이터와 관련하여 크기가 크다. 2. 쿠키는보다 전통적이고 구현하기 쉽지만 보안을 보장하기 위해주의해서 구성해야합니다.

세션 관련 XSS 공격으로부터 응용 프로그램을 보호하려면 다음 조치가 필요합니다. 1. 세션 쿠키를 보호하기 위해 Httponly 및 Secure 플래그를 설정하십시오. 2. 모든 사용자 입력에 대한 내보내기 코드. 3. 스크립트 소스를 제한하기 위해 컨텐츠 보안 정책 (CSP)을 구현하십시오. 이러한 정책을 통해 세션 관련 XSS 공격을 효과적으로 보호 할 수 있으며 사용자 데이터가 보장 될 수 있습니다.

PHP 세션 성능을 최적화하는 방법 : 1. 지연 세션 시작, 2. 데이터베이스를 사용하여 세션을 저장, 3. 세션 데이터 압축, 4. 세션 수명주기 관리 및 5. 세션 공유 구현. 이러한 전략은 높은 동시성 환경에서 응용의 효율성을 크게 향상시킬 수 있습니다.

THESESSION.GC_MAXLIFETIMESETTINGINSTTINGTINGSTINGTERMINESTERMINESTERSTINGSESSIONDATA, SETINSECONDS.1) IT'SCONFIGUDEDINPHP.INIORVIAINI_SET ()

PHP에서는 Session_Name () 함수를 사용하여 세션 이름을 구성 할 수 있습니다. 특정 단계는 다음과 같습니다. 1. Session_Name () 함수를 사용하여 Session_Name ( "my_session")과 같은 세션 이름을 설정하십시오. 2. 세션 이름을 설정 한 후 세션을 시작하여 세션을 시작하십시오. 세션 이름을 구성하면 여러 응용 프로그램 간의 세션 데이터 충돌을 피하고 보안을 향상시킬 수 있지만 세션 이름의 독창성, 보안, 길이 및 설정 타이밍에주의를 기울일 수 있습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기
