使用php手动将变量写入会话文件

时间:2013-05-02 05:52:07

标签: php file session fopen

我有一个不寻常的问题。我需要能够为任何给定用户的会话(除了我自己的会话)手动更改会话变量。该应用程序管理呼叫中心的员工。

每个用户都有一个名为“status”的会话变量,它可以等于“在线”,“在线”,“在线”等等。

当用户休息时,他们的$_SESSION['status']更改为“休息时”。有些人习惯不点击“开始休息”按钮,所以我的老板问我是否可以给她一些功能,让人们从她的管理员帐户中登出。

我不想将“on break”功能转换为使用数据库,因为这将是一个额外的查询,我必须手动添加到大约50个文件。

我知道传统上这是不可能的,但我希望有一些非传统的答案。例如,通过打开和写入服务器本身的会话文件可以实现这一点吗?

4 个答案:

答案 0 :(得分:1)

查看http://php.net/manual/en/function.session-id.php

无论您想做什么,都要尝试修改会话变量。如果不涉及数据库,我认为无论如何都不会这样做。您可以使用session_id()来存储您的主管的会话ID,将她的$ _SESSION更改为其他用户,更改状态,然后将其更改回自己的会话,但我不知道如何在其中获取其会话ID第一个地方,除了在会话开始时把它放在数据库中。

修复正在发生的事情需要你改变50个不同的文件以添加一小段功能,从长远来看,这可能比“非常规答案”更好。

答案 1 :(得分:1)

据我了解,您需要删除用户的会话以将其注销。您可以在物理上删除服务器上的特定用户会话文件,但它很脆弱且不安全(恕我直言)。

最好在数据库中保存会话,然后您可以轻松地操作/删除它。编写自定义会话处理程序的官方指南是here

如果您不想自己编写,可以使用第三方解决方案,例如: this one

答案 2 :(得分:1)

如果您使用的是apache服务器,任何类型的会话创建都会保存在名为tmp的文件夹中,其名称为“sess409080ffgfsfs.tmp”。现在你必须找出你正在寻找的那个现有文件。

答案 3 :(得分:0)

事实证明,这不仅是可能的,而且非常容易。首先,将当前的session_id()保存到变量,然后是session_write_close(),然后使用要编辑的会话的会话ID启动新会话,编辑会话,然后再次session_write_close,并使用session_id启动会话备份保存在上述变量中​​。

$temp = array();
$temp['tempid'] = session_id();
foreach($_SESSION as $key=>$val){
    $temp[$key]=$val;
}
$MESSAGE = "<h2>You have been remotely logged out by admin.</h2><h3>Please see ".$_SESSION['fname']." ".$_SESSION['lname']." before returning to work.</h3>";
session_write_close(); //end admin sesh

session_id($_GET['session']); //start remote sesh
session_start(); 

//Make changes to remote sesh here

session_write_close();

session_id($temp['tempid']); //restart local sesh
session_start();
foreach($temp as $key=>$val){
    $_SESSION[$key]=$val;
}