## For Drupal 7

Drupal has the function drupal_page_is_cacheable() which can be used to set a page to uncacheable. 

Here is the documentation: https://api.drupal.org/api/drupal/includes!bootstrap.inc/function/drupal_page_is_cacheable/7

## For Drupal 8

    // Deny any page caching on the current request.    
    \Drupal::service('page_cache_kill_switch')->trigger();

Then the code is:

    public function myPage() {
      \Drupal::service('page_cache_kill_switch')->trigger();
      return [
        '#markup' => time(),
      ];
    }

As usual, **clean your cache** once done.

## Best practice (*Drupal 8 | 9 | 10*)

For performance and good practice reasons it is recommended to **use dependency injection** inside your Controller class.

 > modules/custom/my_module/MyController.php

```php
<?php

namespace Drupal\my_module\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\PageCache\ResponsePolicy\KillSwitch;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * A controller class that respects Drupal coding standards.
 *
 * @see https://www.drupal.org/docs/develop/standards
 */
class MyController extends ControllerBase {

  /**
   * Page cache kill switch.
   *
   * @var \Drupal\Core\PageCache\ResponsePolicy\KillSwitch
   */
  protected $killSwitch;

  /**
   * {@inheritdoc}
   */
  public function __construct(KillSwitch $kill_switch) {
    $this->killSwitch = $kill_switch;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('page_cache_kill_switch')
    );
  }

  /**
   * Render my page with a renderable array.
   *
   * @return array
   */
  public function myPage() : array {
    $this->killSwitch->trigger();
    return [
      '#markup' => time(),
    ];
  }

}

```