수요 배경:
사용자가 로그인을 하면 브라우저가 로그인 상태를 기억해줘 매번 로그인하지 않아도 된다.
세션 만료 시간:
세션 생성 시간을 설정하지 않으면 프로필에서 기본 생존 시간은 1440초입니다.
세션의 생존 시간이 24분이라는 것. 여기엔 이런 의문이 들 수 있다.
왜 내가 로그인하고 24분이 지나도 탈퇴하지 않는 거죠?
24분이 지나도 세션이 작동하지 않는데 왜 가입자가 탈퇴하지 않는지는 php의 회수기 때문이다.
프로필 php.ini에서 이 두 가지 프로필을 찾을 수 있습니다. 위의 설명은 기본적으로 동일합니다. 대략 다음과 같습니다.
"회수 메커니즘"은 각 세션의 초기화에 대한 확률적 이벤트입니다. 이 확률은 다음 공식에서 도출됩니다.
gc_probability를 gc_divisor로 나눈다.gc_probability 값이 1일 경우gc_divisor 값이 100이면 '회수 메커니즘'이 촉발될 확률은 1%다.
100건의 php 요청이 있을 경우 한 차례 '회수장치'가 촉발될 수 있다는 의미다.그러니까 만약에 sess가ion은 이미 기한이 지났지만, 없다.
'회수 메커니즘'이 촉발돼 세션 파일이 삭제되지 않으면 세션은 유효하다.
세션이 만료되는 즉시 삭제하도록 '회수 메커니즘'을 정교하게 트리거하는 경우 두 값을 모두 1로 설정합니다.
그러나 이는 PHP 성능에 미치는 영향이 크다.
세션 ID가 쿠키에 존재하는 시간:
일반적으로 우리는 브라우저를 닫는다. 만약 우리가 별도로 sess를 설정하지 않았다면ionID가 만료되면 브라우저는 쿠키에서 해당 sessionid를 삭제한다.
우리는 브라우저를 닫지 않았다. 세션의 시간이 왔다.효력이 상실됩니다. 단, php의 회수 메커니즘(아래 문장:PHP session 상세 참조)으로 인해 즉시 효력이 상실되지 않을 수 있습니다.
예:
<?php
session_start();
$_SESSION["username"] = "peter";
echo "등록된 사용자 이름:".$_SESSION["username"];
?>
세션 관련 정보는 'Settings' -> 'Advanced' -> 'Content settings' -> 'Cookies' -> 'See all cookies and site data'에서 확인할 사이트를 선택해도 확인할 수 있다
우리는 위의 코드를 다음과 같이 수정한다
<?php
$lifeTime = 24 * 3600;
session_set_cookie_params($lifeTime);
session_start();
$_SESSION["username"] = "peter";
echo "등록된 사용자 이름:".$_SESSION["username"];
?>
그러면 저희가 설정한 session이 쿠키에서 비활성화 시간이 수정되어 있는 것을 보실 수 있습니다
세션의 생존 시간 설정
1.가장 효과적인 방법 php를 수정한다.ini중
#session타임아웃을 할 수 있습니다
session.gc_maxlifetime = 1440
2. php를 통해 이 값을 수정한다
<?php
$Lifetime = 3600;
$DirectoryPath = "./tmp";
is_dir($DirectoryPath) or mkdir($DirectoryPath, 0777);
//url 기반 전달 sessionid를 켜는지 여부, 여기는 켜지 않고, 켜면 꺼집니다
if (ini_get("session.use_trans_sid") == true) {
ini_set("url_rewriter.tags", "");
ini_set("session.use_trans_sid", false);
}
ini_set("session.gc_maxlifetime", $Lifetime);//세션 생존 시간 설정
ini_set("session.gc_divisor", "1");
ini_set("session.gc_probability", "1");
ini_set("session.cookie_lifetime", "0");//sessionID있다cookie중생존기간
ini_set("session.save_path", $DirectoryPath);//session파일 저장 경로
session_start();
?>
참고: 만약 당신의 웹 사이트가 session_save_path를 사용자 정의했다면, session.gc_probability 값을 설정해야 합니다. 그렇지 않으면 session에서 생성된 sessionID 파일은 절대 삭제되지 않습니다.
3. 쿠키의 시간을 늘리고 세션의 시간을 변칙적으로 늘린다.
<?php
/**
* sessionid를 저장하는 시간만 설정했을 뿐 브라우저가 꺼진 후에도 session은 계속 사용할 수 있다
*session의 생존 기간을 실질적으로 변경하지 않고 있는데, 만약 session이 이미 기한이 지났다면, 이 또한 무의미하다
*/
//sessionid를 저장하는 쿠키의 만료 시간만 사용자가 처음 방문할 때 설정합니다
$lifetime=600;
session_set_cookie_params($lifetime);#注意到放到start的前面
session_start();
//매번 sessionid를 저장하는 쿠키의 만료 시간을 설정합니다
$lifetime=600;
session_start();
setcookie(session_name(),session_id(),time()+$lifetime);
?>
// 위, 매번 설정
주의:개인적으로 느끼거나, 설정하거나두 번째 방법은, 첫 번째와 세 번째를 결합시켜야 문제를 근본적으로 해결할 수 있습니다
<?php
$lifetime=86400;
session_set_cookie_params($lifetime);
session_start();
session_regenerate_id(true);
?>
'개발 꿀팁 > PHP' 카테고리의 다른 글
PHP는 Mysql에 연결하여 기본적인 추가, 삭제, 변경, 조사-사용자 관리 시스템 구현 (0) | 2022.07.05 |
---|---|
PhpSpreadsheet 설정 셀 상세 내역 (0) | 2022.07.05 |
php 자동 로딩 메커니즘 구현 (0) | 2022.07.05 |
php soap에 대한 자세한 정보 웹 서비스 구현 (0) | 2022.07.04 |
php 설치 확장의 몇 가지 방법 (0) | 2022.07.04 |