Guzzle php如何设置(模拟)会话变量

时间:2015-06-18 23:35:49

标签: php phpunit guzzle

在guzzle中,我们可以使用cookiejar来持久化会话。但是如何创建会话变量?这是我的phpunit guzzle代码

use Guzzle\Http\Client; use Guzzle\Plugin\Cookie\CookiePlugin; 
use Guzzle\Plugin\Cookie\CookieJar\ArrayCookieJar;

$cookiePlugin = new CookiePlugin(new ArrayCookieJar());

$client = new Client('http://somewhere.com/'); 
$client->addSubscriber($cookiePlugin);

//I want to set some session variable here
//  $_SESSION['foo'] = 'bar';

$client->get('http://somewhere.com/test.php')->send();

$request = $client->get('http://somewhere.com/'); 
$request->send();

这是服务器上的test.php文件

session_start();
error_log(print_r($_SESSION, true));

1 个答案:

答案 0 :(得分:0)

会话变量的本质是它们无法从外部访问,并且不受客户端的影响(在这种情况下:Guzzle)。影响会话的唯一方法是发送会话cookie。

因此,如果您需要测试来设置会话变量,并且服务器上的生产代码不允许客户端直接设置值,那么您必须提供一种测试方法来执行此操作。请注意这样做的安全隐患,以防此代码逃逸到生产中。

你可以走捷径。如果测试代码与服务器代码在同一台机器上运行,您可以通过客户端预先定义会话ID,将一些数据保存到其中,然后session_write_close()它并使用会话id作为请求的cookie值。它应该将会话数据写入文件并从那里读回来。如果您可以直接访问其他会话存储,也可以使用它。这些方法不会影响安全性。

如果所有其他方法都失败,请创建一个允许两个参数的文件:会话密钥和值。如果发布,脚本将把它们输入$ _SESSION。