2011-07-15 75 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