PHP セッション 閲覧履歴

適当に実装してみた

記事をクリックする
URLのパスパラメータを記事のidとしてセッションに配列で保存

こんなURL
http://localhost/article/15

FQDN + パスパラメータを取得

$url = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

フィルタリング

$filteredUrl = filter_var($url, FILTER_VALIDATE_URL);

URLからパスを文字列で取得
例の15は2桁だけど余裕持たせて4桁

$article_id = substr($filteredUrl, 25, 4);

セッション関連の関数を色々作ってクラスにまとめた

class Session
{
  private $redis;
  public function __construct()
    {
        $this->redis = new Redis();
        $this->redis->connect("redis", (int)$_ENV["REDIS_PORT"]);
        $this->redis->auth($_ENV["REDIS_PASSWORD"]);
    }

  public static function set($key, $val)
  {
     $_SESSION[$key] = $val;
  }  

履歴キーがないなら

if (!Session::has("history")) {

履歴キーと記事idを配列で保存

Session::set("history", [$article_id]);

履歴キーがあるけど配列に今クリックした記事のidがない

} else {
    if (!in_array($article_id, Session::get("history"), true)) {

履歴の配列に記事idを追加

    Session::push("history", $article_id);
  }
}