If you want to change the session id on each log in, make sure to use session_regenerate_id(true) during the log in process.
<?php
session_start();
session_regenerate_id(true);
?>
[Edited by moderator (googleguy at php dot net)]
(PHP 4, PHP 5, PHP 7)
session_destroy — 세션에 등록된 모든 데이터 파괴
session_destroy()는 현재 세션에 관련된 모든 데이터를 파괴합니다. 세션에 연관된 전역 변수나 세션 쿠키를 해제하지는 않습니다. 다시 세션 변수를 사용하려면, session_start()를 호출해야 합니다.
사용자에게 출력된 기록을 포함하여 모든 세션을 없애려면, 세션 id를 해제해야 합니다. 세션 id가 쿠키로 사용되면(기본 동작), 세션 쿠키를 지워야 합니다. 이를 위해 setcookie()를 사용할 수 있습니다.
성공 시 TRUE
를, 실패 시 FALSE
를 반환합니다.
Example #1 $_SESSION으로 세션 파괴하기
<?php
// 세션 초기화
// session_name("something")을 사용한다면, 잊지 마십시오!
session_start();
// 모든 세션 변수 해제
$_SESSION = array();
// 세션을 없애려면, 세션 쿠키도 지웁니다.
// 주의: 이 동작은 세션 데이터뿐이 아닌, 세션 자체를 파괴합니다!
if (isset($_COOKIE[session_name()])) {
setcookie(session_name(), '', time()-42000, '/');
}
// 마지막으로, 세션 파괴.
session_destroy();
?>
Note:
$_SESSION을 사용하지 않는 오랜 배제된 코드에서는 session_unset()을 사용하십시오.
If you want to change the session id on each log in, make sure to use session_regenerate_id(true) during the log in process.
<?php
session_start();
session_regenerate_id(true);
?>
[Edited by moderator (googleguy at php dot net)]
It took me a while to figure out how to destroy a particular session in php. Note I'm not sure if solution provided below is perfect but it seems work for me. Please feel free to post any easier way to destroy a particular session. Because it's quite useful for functionality of force an user offline.
1. If you're using db or memcached to manage session, you can always delete that session entry directly from db or memcached.
2. Using generic php session methods to delete a particular session(by session id).
<?php
$session_id_to_destroy = 'nill2if998vhplq9f3pj08vjb1';
// 1. commit session if it's started.
if (session_id()) {
session_commit();
}
// 2. store current session id
session_start();
$current_session_id = session_id();
session_commit();
// 3. hijack then destroy session specified.
session_id($session_id_to_destroy);
session_start();
session_destroy();
session_commit();
// 4. restore current session id. If don't restore it, your current session will refer to the session you just destroyed!
session_id($current_session_id);
session_start();
session_commit();
?>
I'm using PHP 7.1 and received the following warning when implementing Example #1, above:
PHP message: PHP Warning: session_destroy(): Trying to destroy uninitialized session in...
What I discovered is that clearing $_SESSION and removing the cookie destroys the session, hence the warning. To avoid the warning while still keeping the value of using session_destroy(), do this after everything else:
if (session_status() == PHP_SESSION_ACTIVE) { session_destroy(); }
All of a sudden neither session_destroy() nor $_SESSION=[] were sufficient to log out. I found the next to work:
<?php
setcookie(session_name(), session_id(), 1); // to expire the session
$_SESSION = [];
?>