Обращение с cookies

Я создаю клиентское приложение на основе Guzzle. Я застрял в обработке файлов cookie. Я пытаюсь реализовать его с помощью плагина Cookie, но я не могу заставить его работать. Мое клиентское приложение является стандартным веб-приложением, и похоже, что он работает до тех пор, пока я использую один и тот же объект guzzle, но по всем запросам он не отправляет правильные файлы cookie. Я использую FileCookieJar для хранения файлов cookie. Как сохранить файлы cookie через несколько объектов жужжания?

 // first request with login works fine $cookiePlugin = new CookiePlugin(new FileCookieJar('/tmp/cookie-file')); $client->addSubscriber($cookiePlugin); $client->post('/login'); $client->get('/test/123.php?a=b'); // second request where I expect it working, but it's not... $cookiePlugin = new CookiePlugin(new FileCookieJar('/tmp/cookie-file')); $client->addSubscriber($cookiePlugin); $client->get('/another-test/456'); 

Вы создаете новый экземпляр CookiePlugin по второму запросу, вы должны использовать первый во втором (и последующем) запросе.

 $cookiePlugin = new CookiePlugin(new FileCookieJar('/tmp/cookie-file')); //First Request $client = new Guzzle\Http\Client(); $client->addSubscriber($cookiePlugin); $client->post('/login'); $client->get('/test/first'); //Second Request, same client // No need for $cookiePlugin = new CookiePlugin(... $client->get('/test/second'); //Third Request, new client, same cookies $client2 = new Guzzle\Http\Client(); $client2->addSubscriber($cookiePlugin); //uses same instance $client2->get('/test/third'); 
 $cookiePlugin = new CookiePlugin(new FileCookieJar($cookie_file_name)); // Add the cookie plugin to a client $client = new Client($domain); $client->addSubscriber($cookiePlugin); // Send the request with no cookies and parse the returned cookies $client->get($domain)->send(); // Send the request again, noticing that cookies are being sent $request = $client->get($domain); $request->send(); print_r ($request->getCookies()); 

Текущие ответы будут работать, если все запросы выполняются в одном и том же запросе пользователя. Но он не будет работать, если пользователь сначала войдет в систему, затем перейдет через сайт и снова запросит «Домен».

Вот мое решение (с ArrayCookieJar ()):

Авторизоваться

 $cookiePlugin = new CookiePlugin(new ArrayCookieJar()); //First Request $client = new Client($domain); $client->addSubscriber($cookiePlugin); $request = $client->post('/login'); $response = $request->send(); // Retrieve the cookie to save it somehow $cookiesArray = $cookiePlugin->getCookieJar()->all($domain); $cookie = $cookiesArray[0]->toArray(); // Save in session or cache of your app. // In example laravel: Cache::put('cookie', $cookie, 30); 

Другой запрос

 // Create a new client object $client = new Client($domain); // Get the previously stored cookie // Here example for laravel $cookie = Cache::get('cookie'); // Create the new CookiePlugin object $cookie = new Cookie($cookie); $cookieJar = new ArrayCookieJar(); $cookieJar->add($cookie); $cookiePlugin = new CookiePlugin($cookieJar); $client->addSubscriber($cookiePlugin); // Then you can do other query with these cookie $request = $client->get('/getData'); $response = $request->send();