2011-07-15 105 views
4

我是在site.I的管理員想取消設置一個特定的會話,我知道它的會話ID取消設置一個specefic會話中使用的會話ID

的用戶只是說出這樣

session_id("usernumber"); 
session_start(); 

會議假設用戶A的用戶編號爲「123」 我想破壞用戶A的所有值,用戶A在設置爲session_id(「123」)後不會重新生成sessio_id()。

我該如何取消用戶A的銷燬?

+2

快速查看該文檔顯示:['session_unset()'](HTTP:// WWW。 php.net/manual/function.session-unset.php)。 – Tomalak

+0

女巫方式的用戶登錄?或者只是打開會話處理程序的網站? – Subdigger

+1

此評論可以幫助你:http://www.php.net/manual/en/function.session-destroy.php#95809 –

回答

6

無反向ENGINERING會話處理器....

<?php 

session_id($_GET['killsid']); 
session_start(); 
session_destroy() || die "failed to kill"; 
+0

對我而言不適用 – delive

+0

工作正常。雖然,@Hardik Sondagar的代碼更適合安全實現。 –

1

據我所知,唯一受默認會話處理程序支持的方式是使用session_id("usernumber");模擬用戶,然後刪除這些值。

你也可以store sessions in a database,這將使這一切都非常簡單,但你需要編寫自己的會話處理代碼。

順便說一句,會話ID應該是一個很長的隨機字符串,你猜不到。使用123意味着任何匿名訪問者都可以使用任何用戶憑證輕鬆登錄。

1

您可以嘗試獲取session_save_path()(在此目錄中存儲會話文件)。 使用默認會話名稱時,文件名看起來像sess_jgimlf5edugvdtlaisumq0ham5,其中jgimlf5edugvdtlaisumq0ham5是用戶會話ID,因此您可以取消該鏈接,除非您沒有權限編輯這些文件。

+0

作品! ($ session_id){ unlink(session_save_path()。'/ sess_'。$ session_id); } – realmag777

7

Answer by Jack Luo on php.net

$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(); 
+2

這個很棒。正是我在找的東西,所以你可以踢別人離開系統。 – geilt