簡體   English   中英

狂飲PHP如何設置(模擬)會話變量

[英]Guzzle php how to set (mock) session variable

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

會話變量的本質是不能從外界訪問它們,也不能受到客戶端的影響(在本例中為:Guzzle)。 影響會話的唯一方法是發送或不發送會話cookie。

因此,如果您需要測試來設置會話變量,並且服務器上的生產代碼不允許客戶端直接設置值,則必須提供一種測試方法來執行此操作。 注意這樣做的安全性,以防此代碼轉入生產環境。

您可以采取捷徑。 如果測試代碼與服務器代碼在同一台計算機上運行,​​則可以由客戶端預定義會話ID,將一些數據保存到其中,然后使用session_write_close()並將會話ID用作Cookie價值與要求。 應該將會話數據寫入文件並從那里讀回。 如果您可以直接訪問其他會話存儲,則也可以使用它。 這些方法不會影響安全性。

如果其他所有方法均失敗,則創建一個允許兩個參數的文件:會話密鑰和值。 如果發布,腳本將把它們輸入到$ _SESSION中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM