<commit_before><?php
/**
 * Sessionクラス
 */

namespace Fc2blog\Web;

use Fc2blog\Config;

class Session
{

    private static $isStart = false;

    private function __construct()
    {
    }

    public static function start()
    {
        if (self::$isStart) {
            return;
        }
        if (headers_sent()) {
            return;
        }

        $session_cookie_options = [
            "lifetime" => 0,
            "path" => "/",
            "httponly" => true,
            "samesite" => "Lax" // NOTE: 要件としてhttpサポートがあるため、None属性は指定ができない
            // NOTE: 要件としてhttpサポートがあるため secure属性は指定ができない
        ];

        if (strlen(Config::get('SESSION_DEFAULT_DOMAIN')) > 0) {
            $session_cookie_options['domain'] = Config::get('SESSION_DEFAULT_DOMAIN');
        }

        session_set_cookie_params($session_cookie_options);
        session_name(Config::get('SESSION_NAME'));
        session_start();
        self::$isStart = true;
    }

    /**
     * セッションから情報を取得する
     * @param $key
     * @param null $default
     * @return mixed|null
     */
    public static function get($key, $default = null)
    {
        self::start();
        if (isset($_SESSION[$key])) {
            return $_SESSION[$key];
        }
        return $default;
    }

    /**
     * セッションから情報を取得し破棄する
     * @param $key
     * @param null $default
     * @return mixed|null
     */
    public static function remove($key, $default = null)
    {
        self::start();
        if (isset($_SESSION[$key])) {
            $default = $_SESSION[$key];
            unset($_SESSION[$key]);
        }
        return $default;
    }

    /**
     * セッションに情報を保存する
     * @param $key
     * @param $value
     */
    public static function set($key, $value)
    {
        self::start();
        $_SESSION[$key] = $value;
    }

    /**
     * セッションID置き換え
     */
    public static function regenerate()
    {
        self::start();
        if (session_status() === PHP_SESSION_ACTIVE) {
            session_regenerate_id(true);
        }
    }

    /**
     * セッションを破棄
     * @param Request $request
     */
    public static function destroy(Request $request)
    {
        $_SESSION = [];
        $request->session = [];
        if (isset($request->cookie[Config::get('SESSION_NAME')])) {
            Cookie::remove($request, Config::get('SESSION_NAME'));
        }
        if (session_status() === PHP_SESSION_ACTIVE) {
            session_destroy();
        }
    }

}
<commit_msg>Refactoring Session class, add declare(strict_types=1);. add type.<commit_after><?php
declare(strict_types=1);

namespace Fc2blog\Web;

use Fc2blog\Config;

class Session
{
    public static function start(): void
    {
        if (session_status() === PHP_SESSION_ACTIVE || headers_sent()) {
            return;
        }

        $session_cookie_options = [
            "lifetime" => 0,
            "path" => "/",
            "httponly" => true,
            "samesite" => "Lax" // NOTE: 要件としてhttpサポートがあるため、None属性は指定ができない
            // NOTE: 要件としてhttpサポートがあるため secure属性は指定ができない
        ];

        if (strlen(Config::get('SESSION_DEFAULT_DOMAIN')) > 0) {
            $session_cookie_options['domain'] = Config::get('SESSION_DEFAULT_DOMAIN');
        }

        session_set_cookie_params($session_cookie_options);
        session_name(Config::get('SESSION_NAME'));
        session_start();
    }

    /**
     * セッションから情報を取得する
     * @param string $key
     * @param null $default
     * @return mixed|null
     */
    public static function get(string $key, $default = null)
    {
        self::start();
        return $_SESSION[$key] ?? $default;
    }

    /**
     * セッションから情報を取得し破棄する
     * @param string $key
     * @param mixed|null $default
     * @return mixed|null
     */
    public static function remove(string $key, $default = null)
    {
        self::start();
        $tmp = $_SESSION[$key] ?? $default;
        unset($_SESSION[$key]);
        return $tmp;
    }

    /**
     * セッションに情報を保存する
     * @param string $key
     * @param mixed $value
     */
    public static function set(string $key, $value): void
    {
        self::start();
        $_SESSION[$key] = $value;
    }

    /**
     * セッションID置き換え
     */
    public static function regenerate(): void
    {
        self::start();
        if (session_status() === PHP_SESSION_ACTIVE) {
            session_regenerate_id(true);
        }
    }

    /**
     * セッションを破棄
     * @param Request $request
     */
    public static function destroy(Request $request): void
    {
        $_SESSION = [];
        $request->session = [];
        if (isset($request->cookie[Config::get('SESSION_NAME')])) {
            Cookie::remove($request, Config::get('SESSION_NAME'));
        }
        if (session_status() === PHP_SESSION_ACTIVE) {
            session_destroy();
        }
    }
}

{'fraction_non_alphanumeric': 0.14143715054876785, 'fraction_numerical': 0.0020708221163802027, 'mean_word_length': 1.96137339055794, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2846794', 'n_tokens_mistral': 1610, 'n_tokens_neox': 1560, 'n_words': 269}