| 
<?phpnamespace GuzzleHttp\Cookie;
 
 /**
 * Persists non-session cookies using a JSON formatted file
 */
 class FileCookieJar extends CookieJar
 {
 /** @var string filename */
 private $filename;
 
 /** @var bool Control whether to persist session cookies or not. */
 private $storeSessionCookies;
 
 /**
 * Create a new FileCookieJar object
 *
 * @param string $cookieFile        File to store the cookie data
 * @param bool $storeSessionCookies Set to true to store session cookies
 *                                  in the cookie jar.
 *
 * @throws \RuntimeException if the file cannot be found or created
 */
 public function __construct($cookieFile, $storeSessionCookies = false)
 {
 $this->filename = $cookieFile;
 $this->storeSessionCookies = $storeSessionCookies;
 
 if (file_exists($cookieFile)) {
 $this->load($cookieFile);
 }
 }
 
 /**
 * Saves the file when shutting down
 */
 public function __destruct()
 {
 $this->save($this->filename);
 }
 
 /**
 * Saves the cookies to a file.
 *
 * @param string $filename File to save
 * @throws \RuntimeException if the file cannot be found or created
 */
 public function save($filename)
 {
 $json = [];
 foreach ($this as $cookie) {
 /** @var SetCookie $cookie */
 if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) {
 $json[] = $cookie->toArray();
 }
 }
 
 if (false === file_put_contents($filename, json_encode($json))) {
 throw new \RuntimeException("Unable to save file {$filename}");
 }
 }
 
 /**
 * Load cookies from a JSON formatted file.
 *
 * Old cookies are kept unless overwritten by newly loaded ones.
 *
 * @param string $filename Cookie file to load.
 * @throws \RuntimeException if the file cannot be loaded.
 */
 public function load($filename)
 {
 $json = file_get_contents($filename);
 if (false === $json) {
 throw new \RuntimeException("Unable to load file {$filename}");
 }
 
 $data = json_decode($json, true);
 if (is_array($data)) {
 foreach (json_decode($json, true) as $cookie) {
 $this->setCookie(new SetCookie($cookie));
 }
 } elseif (strlen($data)) {
 throw new \RuntimeException("Invalid cookie file: {$filename}");
 }
 }
 }
 
 |