【问题标题】:Guzzle php how to set (mock) session variableGuzzle php如何设置(模拟)会话变量
【发布时间】:2015-06-30 02:29:47
【问题描述】:

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

【问题讨论】:

    标签: php phpunit guzzle


    【解决方案1】:

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

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

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

    如果一切都失败了,创建一个允许两个参数的文件:会话键和值。如果发布,脚本会将它们输入到 $_SESSION。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-17
      • 2011-12-07
      • 2016-10-01
      相关资源
      最近更新 更多