如何通过Linux命令提示符设置PHP会话变量?
澄清
正如您所知,我们可以在编码时使用$_SESSION全局变量来设置PHP中的会话变量。我想知道是否有一种方法可以通过php命令提示符设置此变量?
例如,在代码中,如果我可以设置$_SESSION ['temp'] =“whatever”
是否有一种方法可以通过命令提示符PHP设置相同的变量?
如何通过Linux命令提示符设置PHP会话变量?
澄清
正如您所知,我们可以在编码时使用$_SESSION全局变量来设置PHP中的会话变量。我想知道是否有一种方法可以通过php命令提示符设置此变量?
例如,在代码中,如果我可以设置$_SESSION ['temp'] =“whatever”
是否有一种方法可以通过命令提示符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);
我处理使用 $_SESSION 变量的调试代码,方法是在一个单独的文件中设置相关变量(例如 session_vars.php
),然后执行以下操作:
cat session_vars.php main.php | php
这将把session_vars.php
中的PHP代码添加到main.php
前面,而不修改main.php
的任何内容,让你的代码保持整洁。
实际上,有一种在CLI下完成此操作的方法。
对于第一个请求,您需要调用session_id()
来获取第一个ID,并将其保存在/tmp文件夹中的唯一名称(或将其保存在数据库或memcache等中)。对于其余的请求,在脚本中调用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
$_SESSION
的所有数据塞进服务器上的某个存储(默认为文件,但通常更改为数据库,memcache等),然后发出“会话cookie”,其中包含一个魔术唯一值,浏览器可以重新提交该值,提示PHP读取回所有数据。