如何通过linux命令提示符设置PHP会话变量?

时间:2011-01-02 00:18:00

标签: linux php

如何通过linux命令提示符设置PHP会话变量?

澄清

因此,正如您所知,我们可以在编码时使用$ _SESSION全局变量在PHP中设置会话变量。我想知道是否有办法通过php命令提示符设置此变量?

例如,在代码中,如果我可以设置$ _SESSION ['temp'] =“无论什么”

有没有办法通过命令提示符PHP设置相同的变量?

4 个答案:

答案 0 :(得分:6)

PHP的默认会话处理程序将会话数据以serialize()格式存储在文件中,这意味着它基本上是纯文本。您当然可以使用任何标准的unix文本操作工具(perl,sed,awk,甚至是shell脚本中的echo / cat等)从命令行操作该文件,只要您不介绍即可序列化数据中存在语法错误。

但是在那时,除非你发现一个函数/库/模块同时执行unserialize()并且很可能serialize(),否则你可能只需要PHP本身来进行操作。它是一个非常罕见的系统,没有与Web服务器版本一起安装CLI版本的PHP。

$dat = file_get_contents('/path/to/session/file');
$session = unserialize($dat);
$session['temp'] = 'whatever';
$dat = serialize($session);
file_put_contents('/path/to/session/file', $dat);

答案 1 :(得分:2)

我通过在单独的文件(即session_vars.php)中设置相关变量来处理使用$ _SESSION变量的调试代码,然后执行以下操作:

cat session_vars.php main.php | php

这会将PHP从session_vars.php添加到main.php而不对main.php进行任何更改,从而使您的代码保持清洁。

答案 2 :(得分:1)

“会话”在这里指的是用于解决HTTP在请求之间无状态这一事实的概念。 PHP会话通过将$_SESSION中的所有数据填充到服务器上的某个存储(默认为文件,但经常更改为数据库,内存缓存等)然后发出“会话cookie”(包含浏览器可以重新呈现的魔术独特值,促使PHP读回所有数据。

这里的关键点是它通常通过cookie运行,至少通过会话标识符运行。从命令行执行PHP脚本时,您本身并没有真正的会话。那么问题就变成了,你试图操纵哪个会话?

答案 3 :(得分:1)

实际上有一种方法可以在CLI下执行此操作。

对于第一个请求,您需要调用session_id()来获取第一个ID,并将其保存在/ tmp文件夹中,并使用唯一名称(或将其保存在数据库或内存缓存等中),其余部分请求,在脚本中调用session_start()之前,从文件中读取会话ID并将其传递给php。

请查看以下示例代码:

if($session_id = @file_get_contents('/tmp/SESSION_ID_xxx.txt')) {
  session_id($session_id);
}
else {
  file_put_contents('/tmp/SESSION_ID_xxx.txt', session_id());
}

session_start();

$_SESSION['var1'] = 'foo'; // this variable will retain the value for all following calls of this script