开发者

How to set a PHP session variable through linux command prompt?

How to set a PHP session variable through linux command prompt?

Clarification

So, as you know we can set session variables in PHP using $_SESSION global variable when coding. I would like to know if there is a way to set this variable through php command prompt?

For example, in the code, if I can set $_SESSION['temp'] = "whatever"

Is there a way 开发者_JAVA技巧to set the same variable through command prompt PHP?


PHP's default session handler stores the session data in serialize() format in a file, which means it's basically plain-text. You could certainly manipulate that file from the command line, using any of the standard unix text manipulation tools (perl, sed, awk, even echo/cat in a shell script, etc...), as long as you don't introduce a syntax error into the serialized data.

But at that point, unless you find a function/library/module that does unserialize() and most likely serialize() as well, you might as well just PHP itself to do the manipulation. It'd be a pretty rare system that doesn't have the CLI version of PHP installed alongside the webserver version.

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


I've handled debugging code which uses $_SESSION variables by setting the relevant variables in a separate file (i.e. session_vars.php), then doing the following:

cat session_vars.php main.php | php

This will prepend the PHP from session_vars.php to main.php without making any changes to main.php, allowing you to keep your code clean.


"Session" here refers to the concept used to work around the fact that HTTP is stateless between requests. PHP sessions operate by stuffing all the data from $_SESSION into some store on the server (defaults to files, but frequently changed around to be databases, memcache, etc.) and then issuing a "session cookie", which contains a magic unique value that the browser can re-present, prompting PHP to read all that data back.

The key point here is that it's typically operated by means of that cookie, and at the very least, by a session identifier. When executing a PHP script from the command line, you don't really have a session, per se. So the question becomes, whose session are you trying to manipulate?


Actually there is a way of doing this under CLI.

For the first request, you need to call session_id() to get the first id and save it somewhere like /tmp folder with a unique name(or save it in database or memcache etc.), for the rest of requests, before you call session_start() in the script, read session id from file and pass it to php.

Check out this sample code below :

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜