根据上次访问的页面显示不同的内容

时间:2017-08-08 03:53:02

标签: php session cookies

我正在一个托管不同城市内容的网站上工作。每个内容都属于一个城市。

目标是根据用户访问过的城市向用户显示文章。

今天我有一个完美的解决方案,但它会大大降低网站的性能,因为它基于重定向。

以下是我目前在index.php中使用的代码:

$request_path = request_path();
if (empty($request_path)) {
  header('Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0');
  $is_https = isset($_SERVER['HTTPS']) && strtolower($_SERVER['HTTPS']) == 'on';
  $http_protocol = $is_https ? 'https' : 'http';
  $base_root = $http_protocol . '://' . $_SERVER['HTTP_HOST'];

  $base_url = $base_root;

  if ($dir = rtrim(dirname($_SERVER['SCRIPT_NAME']), '\/')) {
    $base_path = $dir;
    $base_url .= $base_path;
  }

  if (isset($_COOKIE['city']) && !empty($_COOKIE['city'])) {
    if (in_array($_COOKIE['city'], $cities)) {
      $url = $base_url . '/' . $_COOKIE['city'];
      header('Location: ' . $url, TRUE, 301);
      exit;
    }
  }

  $url = $base_url . '/city1';
  setrawcookie('city', rawurlencode('city1'), REQUEST_TIME + 31536000, '/');
  header('Location: ' . $url, TRUE, 301);
  exit;
}
else {
  $request_path_array = explode('/', $request_path);
  $select_city = check_plain($request_path_array[0]);
  // get city from url at first,if not, get that from cookie.
  if (in_array($select_city, $cities)) {
    $city = $select_city;
    setrawcookie('city', rawurlencode($select_city), REQUEST_TIME + 31536000, '/');
  }
  else {
    if (isset($_COOKIE['city'])) {
      $city_from_cookie = $_COOKIE['city'];
      if (in_array($city_from_cookie, $cities)) {
        $city = $city_from_cookie;
      }
      else {
        $city = 'city1';
      }
    }
    else {
      $city = 'city1';
    }

  }
}

对网站的每个请求都会通过此脚本并设置一个全局变量,该变量用于不同的数据库查询以获取相应的内容。

我想知道是否有更好的方法来实现这一目标。我正在努力解决任何解决方案,因为我正致力于重建整个平台,这是一个关键功能。

请记住,速度和稳定性是主要的KPI。

谢谢,

0 个答案:

没有答案