如何 PHP 正確的清除 session

總算找到解法了。

簡述

先來看原本的做法:

1
2
session_start();
session_destroy();

這樣子確實能清除 server 端的 session 資料,可是 client 端的 cookie 還是會保留。

error

所以這邊要教你怎麼把 client 端也清乾淨。

範例

拿一個登入機制來當範例:

  1. 建立 session(登入)
1
2
3
4
5
6
7
8
9
10
session_set_cookie_params([
'lifetime' => 3600,
'path' => '/peanu/blog/',
'domain' => 'localhost',
'secure' => TRUE,
'httponly' => TRUE,
'samesite' => 'Lax'
]);
session_start();
$_SESSION['username'] = 'peanu';
  1. 刪除 session(登出)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
session_set_cookie_params([
'lifetime' => 3600,
'path' => '/peanu/blog/',
'domain' => 'localhost',
'secure' => TRUE,
'httponly' => TRUE,
'samesite' => 'Lax'
]);
// 這裡的參數會是從上面的設定來拿的,
// 所以最好是統一設為一樣的,才不會出錯。
$cookie_Info = session_get_cookie_params();
session_start();
// 這一行就是把 cookie 清掉的重點了
setcookie(session_name(), '', time()-42000, $cookie_Info['path']);
session_destroy();

示範一下:

demo

經過我多次測試後,得出一個重點:

setcookie 的 path 參數一定要一樣,不然就會刪不掉。

再說一次,只要 path 不對,就算其他都正確也刪不掉,所以要特別注意。

mentor-program-day90 mentor-program-day89
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×