function my_session_start() {
@session_start();
if (isset($_SESSION['destroyed'])) {
if ($_SESSION['destroyed'] < time()-300) {
// 일반적으로 일어나서는 안됨. 느리거나 불안정한 네트웍일때
// 이 사용자 세션의 모든 인증상태를 제거
@remove_all_authentication_flag_from_active_sessions($_SESSION['userid']);
//throw(new DestroyedSessionAccessException);
}
if (isset($_SESSION['new_session_id'])) {
// 아직 만료되지 않음. 불안정한 네트워크로 인해 쿠키가 손실될 수 있음
// 다시 올바른 세션ID 쿠키 생성
// 주의: 인증 플래그를 제거하려면 세션 ID를 다시 설정하지 마십시오.
session_commit();
session_id($_SESSION['new_session_id']);
// 새로운 세션ID가 있어야 함.
@session_start();
return;
}
}
//session_write_close();
}
my_session_start();
function my_session_regenerate_id() {
// 불안정한 네트워크로 인해 세션ID가 설정되지 않은 경우 올바른 세션ID를 설정하려면 새 세션ID가 필요함.
$new_session_id = session_create_id();
//$new_session_id = session_regenerate_id();//for php7.0
$_SESSION['new_session_id'] = $new_session_id;
// Set destroy timestamp
$_SESSION['destroyed'] = time();
// 현재 세션 쓰기 및 닫기;
// DB에 세션을 저장하는 경우 주석처리
session_save_path($_SERVER['DOCUMENT_ROOT'] . "/data/session");
session_commit();
// Start session with new session ID
session_id($new_session_id);
ini_set('session.use_strict_mode', 0);
@session_start();
ini_set('session.use_strict_mode', 1);
// New session does not need them
unset($_SESSION['destroyed']);
unset($_SESSION['new_session_id']);
}
my_session_regenerate_id();
참조 : http://php.net/manual/en/function.session-regenerate-id.php
'PHP' 카테고리의 다른 글
PHPMailer 사용 SMTP (0) | 2019.01.08 |
---|---|
코드이그나이터 3.1.9 + 오라클 데이터베이스 세션 (0) | 2019.01.08 |
IIS PHP 헤더설정 (0) | 2019.01.08 |
단방향 암호화 문자열 crypt sha512 암호화 (0) | 2019.01.08 |
CentOS7 에서 php7.2 yum 설치 (0) | 2018.06.07 |