Обнаружьте, обновляется ли браузер или не использующий PHP

Мы могли бы сделать следующее:

random_number_generator <- function(n, distribution, mean = NULL, sd = NULL, lambda = NULL, size = NULL, prob = NULL) {
  if (distribution == "Normal")
    x <- rnorm(n = n, mean = mean, sd = sd)
  else if (distribution == "Poisson")
    x <- rpois(n = n, lambda = lambda)
  else if (distribution == "Binomial")
    x <- rbinom(n = n, size = size, prob = prob)
  out <- list(x = x, distribution = distribution, size = size, prob = prob)
  class(out) <- "MyClass"
  out
}

summary.MyClass <- function(obj) {
  stopifnot(inherits(obj, "MyClass"))
  cat("\t\n", 
      sprintf("Sample size: %s\n", length(obj$x)),
      sprintf("Mean: %s\n", mean(obj$x)),
      sprintf("Standard Deviation: %s\n", sd(obj$x)),
      sprintf("Distribution: %s\n", obj$distribution),
      sprintf("Size: %d\n", obj$size),
      sprintf("Probability: %s\n", obj$prob)
  )
}

answer <- random_number_generator(n = 10, distribution = "Binomial", size = 15, prob = 0.4)
summary(answer)
#   
#  Sample size: 10
#  Mean: 5.5
#  Standard Deviation: 1.64991582276861
#  Distribution: Binomial
#  Size: 15
#  Probability: 0.4

Итак, чтобы вернуть дополнительную информацию, нам нужно сохранить эту дополнительную информацию в качестве выходной информации из random_number_generator, что я сделал с

out <- list(x = x, distribution = distribution, size = size, prob = prob)
class(out) <- "MyClass"
5
задан Cœur 8 October 2018 в 18:47
поделиться

4 ответа

Если бы страница была обновлена затем, то Вы ожидали бы, что два запроса друг после друга будут для того же URL (путь, имя файла, строка запроса), и то же содержание формы (если таковые имеются) (данные POST). Это могло быть довольно большим количеством данных, таким образом, может быть лучше хешировать его. Так...


<?php
session_start();

//The second parameter on print_r returns the result to a variable rather than displaying it
$RequestSignature = md5($_SERVER['REQUEST_URI'].$_SERVER['QUERY_STRING'].print_r($_POST, true));

if ($_SESSION['LastRequest'] == $RequestSignature)
{
  echo 'This is a refresh.';
}
else
{
  echo 'This is a new request.';
  $_SESSION['LastRequest'] = $RequestSignature;
}

В ситуации с Ajax необходимо было бы быть осторожными, о которых файлах Вы помещаете этот код в то, чтобы не обновить подпись LastRequest для сценариев, которые назвали асинхронно.

12
ответ дан 18 December 2019 в 05:40
поделиться
<?php

    session_start();
    if (!isset($_SESSION["visits"]))
        $_SESSION["visits"] = 0;
    $_SESSION["visits"] = $_SESSION["visits"] + 1;

    if ($_SESSION["visits"] > 1)
    {
        echo "You hit the refresh button!";
    }
    else
    {
        echo "This is my site";
    }

    // To clear out the visits session var:
    // unset($_SESSION["visits"]);

?>
3
ответ дан 18 December 2019 в 05:40
поделиться

Если Вы подразумеваете, что хотите различать то, когда пользователь сначала достигает страницы от того, когда они перезагружают проверку страницы ссылающийся домен. В php это: $ _SERVER ["HTTP_REFERER"]. Посмотрите, равно ли это страница, Ваш сценарий работает. Может иметь место, что клиент не предоставляет эту информацию, если это происходит, Вы могли бы установить cookie или переменную сеанса для отслеживания, какова последняя требуемая страница была.

1
ответ дан 18 December 2019 в 05:40
поделиться

Если кто-то обновит страницу, то тот же запрос будет отправлен как предыдущий. Таким образом, необходимо проверить, совпадает ли текущий запрос с последним. Это может быть сделано следующим образом:

session_start();

$pageRefreshed = false;
if (isset($_SESSION['LAST_REQUEST']) && $_SERVER['REQUEST_URI'] === $_SESSION['LAST_REQUEST']['REQUEST_URI']) {
    if (isset($_SERVER['HTTP_REFERER'])) {
         // check if the last request’s referrer is the same as the current
         $pageRefreshed = $_SERVER['HTTP_REFERER'] === $_SESSION['LAST_REQUEST']['HTTP_REFERER'];
    } else {
         // check if the last request didn’t have a referrer either
         $pageRefreshed = $_SERVER['HTTP_REFERER'] === null;
    }
}

// set current request as "last request"

$_SERVER['LAST_REQUEST'] = array(
    'REQUEST_URI'  => $_SERVER['REQUEST_URI'],
    'HTTP_REFERER' => isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null
);

Я не протестировал его, но это должно работать.

1
ответ дан 18 December 2019 в 05:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: