// vérifie que la session n'a pas encore été utilisée
if (session_status() != PHP_SESSION_ACTIVE)
{

	class SessionOVH implements SessionHandlerInterface {
	
		private $path;	// stockage définie dans session_save_path()
		
		public function open($path, $sessionName): bool
		{
				// mémorie avec un préfixe
			$this->path = $path . '/ses';
			
				// créé le dossier si besoin
			if (! is_dir($path)) {
				@mkdir($path, 0777);
				return is_dir($path);
			}
			return true;
		}
		
		private function id_to_filename($id)
		{
				// protège le numéro de session pour utilisation en nom de fichier
			return preg_replace('{\W}', '-', $id) ? $this->path . $id : false;
		}
		
		#[\ReturnTypeWillChange]
		public function read($id)
		{
			$filename = $this->id_to_filename($id);
			return $filename ? (string)@file_get_contents($filename) : false;
		}
		
		public function write($id, $data): bool
		{
			$filename = $this->id_to_filename($id);
			return $filename ? file_put_contents($filename, $data) !== false : false;
		}
		
		public function destroy($id): bool
		{
			$filename = $this->id_to_filename($id);
			if (! $filename || ! file_exists($filename))
				return false;
			unlink($filename);
			return true;
		}
		
		#[\ReturnTypeWillChange]
		public function gc($maxlifetime)
		{
			$deadline = time() - $maxlifetime;
			foreach (glob($this->path . '*') as $file)
				if (filemtime($file) < $deadline)
					unlink($file);
			return true;
		}
		
		public function close(): bool
		{
			return true;
		}
		
	}
	
		// modifie le mécanisme de session PHP
	session_set_save_handler(new SessionOVH(), true);
	
		// change le chemin
	session_save_path(dirname($_SERVER['DOCUMENT_ROOT']) . '/sessions');
	
		// expire au bout de 20 heures
	session_cache_expire(20*60);
	
		// lance le mécanisme de session
	session_start();
}