Bonjour
Je cherche à identifier les visiteurs venant des USA pour les bloquer.
C'est un problème de décalage horaire.
J'ai deux façons pour résoudre celà :
1) Calculer le décalage horaire entre l'heure locale du browser, et celle du serveur.
2) Calculer l'offsettime entre le browser et UTC, et puis entre UTC et Europe/Paris.
Voir ci-dessous :
Le timestamp est virtuel, ses composantes supposent 12 mois/an , 50 jours/mois, 24 heures/jour, 60 minutes/heure, et 60 secondes/minute.
Après, je décompose le timestamp.
Sur mon localhost, au test, j'obtiens ceci :
$_SESSION['decalage'] = 00-11-21 21:53:30
Bizarre, bizarre...
Merci beaucoup pour votre aide.
Respects.
Je cherche à identifier les visiteurs venant des USA pour les bloquer.
C'est un problème de décalage horaire.
J'ai deux façons pour résoudre celà :
1) Calculer le décalage horaire entre l'heure locale du browser, et celle du serveur.
2) Calculer l'offsettime entre le browser et UTC, et puis entre UTC et Europe/Paris.
Voir ci-dessous :
PHP:
<?php
session_start();
$str = "<!DOCTYPE html>\n";
$str .= "<html lang=\"fr\">\n";
$str .= "<head>\n";
$str .= "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n";
$str .= "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n";
$str .= "<head>\n";
$str .= " <script>\n";
$str .= " function lien()\n";
$str .= " {\n";
$str .= " date_visitor = new Date();\n";
$str .= " var year = date_visitor.getFullYear();\n";
$str .= " var month = date_visitor.getMonth();\n";
$str .= " var day = date_visitor.getDate();\n";
$str .= " var hour = date_visitor.getHours();\n";
$str .= " var minute = date_visitor.getMinutes();\n";
$str .= " var second = date_visitor.getSeconds();\n";
$str .= "\n";
$str .= " var timestamp = 12 * 50 * 24 * 60 * 60 * year + 50 * 24 * 60 * 60 * month + 24 * 60 * 60 * day + 60 * 60 * hour + 60 * minute + second;\n";
$str .= " \n";
$str .= " var chainurl='" . $_SERVER['PHP_SELF'] . "?timestamp=' + timestamp;\n";
$str .= " location.href=chainurl;\n";
$str .= " }\n";
$str .= " </script>\n";
$str .= " <title>Titre</title>\n";
$str .= " <meta http-equiv=\"Content-Type\" content=\"text/html;charset=iso-8859-1\" />\n";
$str .= "</head>\n";
echo $str;
if(!isset($_SESSION['decalage']) and !isset($_GET['timestamp']))
{
echo "<body onLoad=lien()>\n";
}
else if (!isset($_SESSION['decalage']))
{
echo "<body>\n";
if(isset($_GET['timestamp']))
{
$timestamp = (int)$_GET['timestamp'];
// var timestamp = 12 * 50 * 24 * 60 * 60 * year + 50 * 24 * 60 * 60 * month + 24 * 60 * 60 * day + 60 * 60 * hour + 60 * minute + second;\n";
$year = floor($timestamp / (12 * 50 * 24 * 60 * 60));
$timestamp = $year % (12 * 50 * 24 * 60 * 60);
$month = floor($timestamp / (50 * 24 * 60 * 60));
$timestamp = $month % (50 * 24 * 60 * 60);
$day = floor($timestamp / (24 * 60 * 60));
$timestamp = $day % (24 * 60 * 60);
$hour = floor($timestamp / (60 * 60));
$timestamp = $hour % (60 * 60);
$minute = floor($timestamp / 60);
$second = $minute % 60;
$date_locale = $year . "-" . substr("00" . $month, -2) . "-" . substr("00" . $day, -2) . " " . substr("00". $hour, -2) . ":" . substr("0" . $minute, -2) . ":" . substr("00" . $second,- 2);
$date_browser = new DateTime($date_locale);
$date_locale = $date_browser->format('Y-m-d H:i:s');
$date_now = new DateTime("now");
$date_server = $date_now->format('Y-m-d H:i:s');
$decalage = date_diff($date_browser, $date_now);
$timestamp_received = mktime ($hour, $minute, $second, $month, $day, $year);
$_SESSION['decalage'] = $decalage->format('%Y-%M-%D %H:%I:%S');
echo "\t\t\t" . '$_SESSION[\'decalage\'] = ' . $_SESSION['decalage'];
echo "<br /><br />\n";
exit(0);
}
}
?>
Le timestamp est virtuel, ses composantes supposent 12 mois/an , 50 jours/mois, 24 heures/jour, 60 minutes/heure, et 60 secondes/minute.
Après, je décompose le timestamp.
Sur mon localhost, au test, j'obtiens ceci :
$_SESSION['decalage'] = 00-11-21 21:53:30
Bizarre, bizarre...
Merci beaucoup pour votre aide.
Respects.