Version.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\App\PageCache;
  7. /**
  8. * Class Version
  9. *
  10. */
  11. class Version
  12. {
  13. /**
  14. * Name of cookie that holds private content version
  15. */
  16. const COOKIE_NAME = 'private_content_version';
  17. /**
  18. * Ten years cookie period
  19. */
  20. const COOKIE_PERIOD = 315360000;
  21. /**
  22. * Cookie Manager
  23. *
  24. * @var \Magento\Framework\Stdlib\CookieManagerInterface
  25. */
  26. protected $cookieManager;
  27. /**
  28. * Request
  29. *
  30. * @var \Magento\Framework\App\Request\Http
  31. */
  32. protected $request;
  33. /**
  34. * @var \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory
  35. */
  36. protected $cookieMetadataFactory;
  37. /**
  38. * @param \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager
  39. * @param \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory
  40. * @param \Magento\Framework\App\Request\Http $request
  41. */
  42. public function __construct(
  43. \Magento\Framework\Stdlib\CookieManagerInterface $cookieManager,
  44. \Magento\Framework\Stdlib\Cookie\CookieMetadataFactory $cookieMetadataFactory,
  45. \Magento\Framework\App\Request\Http $request
  46. ) {
  47. $this->cookieManager = $cookieManager;
  48. $this->request = $request;
  49. $this->cookieMetadataFactory = $cookieMetadataFactory;
  50. }
  51. /**
  52. * Generate unique version identifier
  53. *
  54. * @return string
  55. */
  56. protected function generateValue()
  57. {
  58. return md5(rand() . time());
  59. }
  60. /**
  61. * Handle private content version cookie
  62. * Set cookie if it is not set.
  63. * Increment version on post requests.
  64. * In all other cases do nothing.
  65. *
  66. * @return void
  67. */
  68. public function process()
  69. {
  70. if ($this->request->isPost()) {
  71. $publicCookieMetadata = $this->cookieMetadataFactory->createPublicCookieMetadata()
  72. ->setDuration(self::COOKIE_PERIOD)
  73. ->setPath('/')
  74. ->setSecure($this->request->isSecure())
  75. ->setHttpOnly(false);
  76. $this->cookieManager->setPublicCookie(self::COOKIE_NAME, $this->generateValue(), $publicCookieMetadata);
  77. }
  78. }
  79. }