From 186d770741fa0a969b640da5728043a8d25f4f4a Mon Sep 17 00:00:00 2001
From: Fabian de Boer
Date: Sun, 19 Jul 2026 20:17:37 +0200
Subject: [PATCH] session directory prefix; reset.php made saver. (isues #17
and #16)
---
cli_scripts/reset.php | 100 +++++++++++++++++++++++++++++----------
cli_scripts/test.php | 5 +-
lib/ZAPDisplay.class.php | 5 +-
3 files changed, 82 insertions(+), 28 deletions(-)
diff --git a/cli_scripts/reset.php b/cli_scripts/reset.php
index 6cd3f1f..2cc6f1c 100755
--- a/cli_scripts/reset.php
+++ b/cli_scripts/reset.php
@@ -1,28 +1,80 @@
+#!/usr/bin/env php
session reset
';
-
-if ($_GET['allcollages'] == 'clear') {
- $sessions = glob('./Sessions/*');
- foreach($sessions as $folder){
- $files = glob($folder.'/*');
- foreach($files as $fileToDelete){
- echo "$fileToDelete deleted
";
- unlink($fileToDelete);
- }
- echo "$folder deleted
";
- rmdir($folder);
- }
+if (php_sapi_name() !== 'cli') {
+ die('This script can only be run from the command line.' . PHP_EOL);
}
-echo '
';
-session_destroy();
-?>
\ No newline at end of file
+// Make sure relative paths in init.php resolve against the project root
+chdir(__DIR__);
+
+require_once __DIR__ . '/../conf/init.php';
+
+// Start a session so reset/destroy have something to work with
+if (session_status() === PHP_SESSION_NONE) {
+ session_start();
+}
+
+// --- Session reset ---
+Session::reset();
+
+echo 'Session reset.' . PHP_EOL;
+
+// --- Optional: purge all session folders ---
+$purgeAll = in_array('--all', $argv);
+
+if ($purgeAll) {
+ $force = in_array('-f', $argv);
+
+ if (!$force) {
+ echo 'WARNING: This will permanently delete ALL session folders.' . PHP_EOL;
+ echo 'Are you sure? (type "yes" to confirm): ';
+ $handle = fopen('php://stdin', 'r');
+ $input = trim(fgets($handle));
+ fclose($handle);
+
+ if (strtolower($input) !== 'yes') {
+ echo 'Aborted.' . PHP_EOL;
+ exit(0);
+ }
+ }
+
+ $sessionsDir = ZAP_APP_BASE_DIR . DIRECTORY_SEPARATOR . ZAP_SESSIONS_DIR;
+ $folders = glob($sessionsDir . DIRECTORY_SEPARATOR . '*');
+ $count = 0;
+
+ foreach ($folders as $folder) {
+ if (!is_dir($folder)) {
+ continue;
+ }
+ $files = glob($folder . DIRECTORY_SEPARATOR . '*');
+ foreach ($files as $file) {
+ if (is_file($file)) {
+ unlink($file);
+ }
+ }
+ rmdir($folder);
+ $count++;
+ }
+
+ echo "Purged $count session folder(s)." . PHP_EOL;
+}
+
+// Only destroy if a session was actually started
+if (session_status() === PHP_SESSION_ACTIVE) {
+ Session::destroy();
+ echo 'Session destroyed.' . PHP_EOL;
+}
+
+exit(0);
\ No newline at end of file
diff --git a/cli_scripts/test.php b/cli_scripts/test.php
index 3a618cd..bb1b29b 100755
--- a/cli_scripts/test.php
+++ b/cli_scripts/test.php
@@ -85,9 +85,10 @@ function testImgSearch() {
return;
}
- $folder = ZAP_APP_BASE_DIR . DIRECTORY_SEPARATOR . ZAP_SESSIONS_DIR . DIRECTORY_SEPARATOR . 'search_test_' . ZAP_MOMENT;
+ $suffix = bin2hex(random_bytes(4));
+ $folder = ZAP_APP_BASE_DIR . DIRECTORY_SEPARATOR . ZAP_SESSIONS_DIR . DIRECTORY_SEPARATOR . 'search_test_' . ZAP_MOMENT . '_' . $suffix;
if (!is_dir($folder)) {
- @mkdir($folder, 0777, true);
+ mkdir($folder, 0777, true);
}
echo "\nQuery: '$word'\n\n";
diff --git a/lib/ZAPDisplay.class.php b/lib/ZAPDisplay.class.php
index 2d1ef71..9cfe2c2 100755
--- a/lib/ZAPDisplay.class.php
+++ b/lib/ZAPDisplay.class.php
@@ -49,9 +49,10 @@ class ZAPDisplay implements ZAPHandler {
*/
private function createFolder() {
try {
+ $suffix = bin2hex(random_bytes(4));
$folder = ZAP_APP_BASE_DIR . DIRECTORY_SEPARATOR
- . ZAP_SESSIONS_DIR . DIRECTORY_SEPARATOR . 'zap_' . ZAP_MOMENT;
- if (!@mkdir($folder, 0777)) {
+ . ZAP_SESSIONS_DIR . DIRECTORY_SEPARATOR . 'zap_' . ZAP_MOMENT . '_' . $suffix;
+ if (!mkdir($folder, 0777, true)) {
throw new Exception('' . ERROR_PREFIX . 'Unable to create base dir: ' . $folder . '
');
}
return $folder;