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); } }