[PHP] 強制清除所有session

透過調整以下三種參數去清除不太即時,且還要改回設定

  • session.gc_probability
  • session.gc_divisor
  • session.gc_maxlifetime

 

Session預設是以檔案的形式存放在檔案系統中

透過刪除Session File也可以達到效果,且非常即時

缺點是無差別地圖砲,Server上所有網站的session都會被清掉

至於檔案是存放在/var/lib/php5

root@localhost [/var/lib/php5] [15:09] ls
total 148
drwxr-xr-x 6 root     root        55 Mar 18  2016 modules
-rw------- 1 www-data www-data     0 Jan 11 15:03 sess_0ds3e4m3r7lgjooltl9a3l55c5
-rw------- 1 www-data www-data     0 Jan 11 15:05 sess_0pdn79vvlmk49pocsog0lm1s04
-rw------- 1 www-data www-data    21 Jan 11 14:52 sess_181m0vk41kg4jpbptqqkomvu45
-rw------- 1 www-data www-data     0 Jan 11 15:03 sess_22hv9nrcie1dgklni03ici5rg1
-rw------- 1 www-data www-data     0 Jan 11 15:07 sess_2jf0i4ld55pvov4d24s103rjh3
-rw------- 1 www-data www-data    21 Jan 11 14:50 sess_2u8fsfnkp9a1fanfa7qnemlpf5
-rw------- 1 www-data www-data     0 Jan 11 15:04 sess_43511pnkfu8vmmjk5uk5fa53f4
-rw------- 1 www-data www-data    21 Jan 11 14:45 sess_45a6khgkcq4irmvsg43ok8k766
-rw------- 1 www-data www-data   593 Jan 11 15:05 sess_4tpqknfnmt5k8mqq6g0ompmda5
-rw------- 1 www-data www-data     0 Jan 11 15:05 sess_6kdp8fepotp0v1krkv41dcqeu0
-rw------- 1 www-data www-data   512 Jan 11 14:52 sess_78h12laa6erhi4gsfa3l4s0h06
-rw------- 1 www-data www-data   488 Jan 11 15:07 sess_7u31csrpr889ubarhitom72ij6
-rw------- 1 www-data www-data    21 Jan 11 14:50 sess_8f2s5i1fb6v59t4rb0eenet682
-rw------- 1 www-data www-data     0 Jan 11 15:04 sess_8m5mov1o5mkjt7vuf0td0ilv53
(以下簡略...)

 

其中有個modules目錄是存放一些PHP的元件

記得不要手誤去刪到

刪掉所有Session Files

root@locahost [/var/lib/php5] [15:09] rm -f sess_*
root@locahost [/var/lib/php5] [15:09] ls
total 1
drwxr-xr-x 6 root     root        55 Mar 18  2016 modules

 

重整網站後就會發現session全部都刷新了

[PHP] PHP 5.4 的 session 寫法變革

前陣子把 PHP 升級到5.4後
發現有用到session的程式都爆了

Fatal error: Call to undefined function session_register()

 

google一下
原來是PHP 5.4的session寫法有改變
PHP 5.4 移除了 session_is_registered()  、 session_register()  與 session_unregister()  三支function。
Session 的操作更簡化了一些。

//判斷 Session 是否存在
if( isset($_SESSION['foo']) ) {
    echo 'session is exist';
}

//註冊 Session
$_SESSION['foo'] = 'bar';

//移除 Session
unset($_SESSION['foo']);

 

這樣操作其實更直覺,也不需要額外多記函式(個人很健忘),這三支函式早該移除了。
但是大大小小的舊系統改起來也是不少麻煩
所以另一個做法就是把移除的function在script執行前先定義好:

<?php
if ( !function_exists('session_register') ) {
    function session_register() {
        $args = func_get_args();
        foreach ($args as $key) {
            $_SESSION[ $key ] = $GLOBALS[ $key ];
        }
    }
}

if ( !function_exists('session_is_registered') ) {
    function session_is_registered( $key ) {
        return isset( $_SESSION[ $key ] );
    }
}

if ( !function_exists('session_unregister') ) {
    function session_unregister( $key ){
        unset( $_SESSION[ $key ] );
    }
}

 

這樣就可以相容舊系統了
不過還是比較建議移除舊寫法囉
Reference:http://blog.wu-boy.com/2012/06/what-has-changed-in-php-5-4-x/