總算找到解法了。
簡述
先來看原本的做法:
1 2
| session_start(); session_destroy();
|
這樣子確實能清除 server 端的 session 資料,可是 client 端的 cookie 還是會保留。
所以這邊要教你怎麼把 client 端也清乾淨。
範例
拿一個登入機制來當範例:
- 建立 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';
|
- 刪除 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();
setcookie(session_name(), '', time()-42000, $cookie_Info['path']); session_destroy();
|
示範一下:
經過我多次測試後,得出一個重點:
setcookie 的 path 參數一定要一樣,不然就會刪不掉。
再說一次,只要 path
不對,就算其他都正確也刪不掉,所以要特別注意。