如何通过linux命令提示符设置PHP会话变量?
澄清
因此,正如您所知,我们可以在编码时使用$ _SESSION全局变量在PHP中设置会话变量。我想知道是否有办法通过php命令提示符设置此变量?
例如,在代码中,如果我可以设置$ _SESSION ['temp'] =“无论什么”
有没有办法通过命令提示符PHP设置相同的变量?
答案 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