如何通过Linux命令行设置PHP会话变量?

5

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

澄清

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

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

是否有一种方法可以通过命令提示符PHP设置相同的变量?


你能详细说明一下你想要实现什么吗? - Steven D
2
我觉得你在Stack Overflow上会得到一个更完整的答案。 - Steven D
同意,我认为这不会是特定于Linux的。 - Michael Mrozek
你要设置谁的会话? - RobertPitt
我正在编写一个非常特定的命令行应用程序(或尝试编写),它可以自动执行一些任务,需要这个操作。目前只是我的会话。 - Sev
4个回答

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);

2

我处理使用 $_SESSION 变量的调试代码,方法是在一个单独的文件中设置相关变量(例如 session_vars.php),然后执行以下操作:

cat session_vars.php main.php | php

这将把session_vars.php中的PHP代码添加到main.php前面,而不修改main.php的任何内容,让你的代码保持整洁。


1

实际上,有一种在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

1
“Session”在此处指用于解决HTTP请求之间无状态的概念。 PHP会话通过将来自 $_SESSION 的所有数据塞进服务器上的某个存储(默认为文件,但通常更改为数据库,memcache等),然后发出“会话cookie”,其中包含一个魔术唯一值,浏览器可以重新提交该值,提示PHP读取回所有数据。
关键点在于它通常是通过cookie或至少是通过会话标识符来操作的。当从命令行执行PHP脚本时,您实际上没有会话。因此问题就变成了:您正在尝试操作谁的会话?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接