Как правильно завершить сессию, чтобы всё работало корректно?

Как можно улучшить структуру и ясность кода для страницы пользователя, начиная с определения заголовков и заканчивая содержимым, где выводится информация о пользователе и его фотографии?
  • 11 декабря 2024 г. 14:43
Ответы на вопрос 2
Для корректного завершения сессии на веб-странице, а также для улучшения структуры и ясности кода, можно следовать нескольким рекомендациям. Ниже приведены шаги как для завершения сессии, так и для улучшения кода структуры страницы пользователя.

### Корректное завершение сессии

1. **Очистка данных сессии**:
   - Убедитесь, что вы очищаете все данные сессии, которые были установлены в процессе работы пользователя.
   ```php
   session_start();
   // Удаление всех переменных сессии
   $_SESSION = array();
   ```

2. **Удаление куки сессии** (если используется):
   - Удалите куки, связанные с сессией, чтобы пользователю пришлось заново аутентифицироваться.
   ```php
   if (ini_get("session.use_cookies")) {
       $params = session_get_cookie_params();
       setcookie(session_name(), '', time() - 42000,
           $params["path"], $params["domain"], $params["secure"], $params["httponly"]
       );
   }
   ```

3. **Завершение сессии**:
   - Завершите сессию с помощью `session_destroy()`.
   ```php
   session_destroy();
   ```

4. **Перенаправление**:
   - После завершения сессии перенаправьте пользователя на страницу входа или на страницу с сообщением об успешном завершении сессии.
   ```php
   header("Location: login.php");
   exit();
   ```

### Улучшение структуры и ясности кода

1. **Структурирование HTML**:
   - Используйте семантические теги HTML5, такие как `<header>`, `<main>`, `<footer>`, для улучшения структуры.
   - Пример:
   ```html
   <!DOCTYPE html>
   <html lang="ru">
   <head>
       <meta charset="UTF-8">
       <meta name="viewport" content="width=device-width, initial-scale=1.0">
       <title>Профиль пользователя</title>
       <link rel="stylesheet" href="styles.css">
   </head>
   <body>
       <header>
           <h1>Профиль пользователя</h1>
       </header>
       <main>
           <section class="user-info">
               <h2>Информация о пользователе</h2>
               <div class="user-details">
                   <img src="user_photo.jpg" alt="Фотография пользователя" class="user-photo">
                   <h3>Имя пользователя: <?php echo htmlspecialchars($userName); ?></h3>
                   <p>Email: <?php echo htmlspecialchars($userEmail); ?></p>
                   <!-- Другие данные о пользователе -->
               </div>
           </section>
       </main>
       <footer>
           <p>&copy; 2023 Ваша Компания</p>
       </footer>
   </body>
   </html>
   ```

2. **Использование CSS для стилизации**:
   - Создайте отдельный файл стилей (например, `styles.css`) и используйте классы для стилизации элементов.
   - Пример:
   ```css
   body {
       font-family: Arial, sans-serif;
       margin: 0;
       padding: 0;
       background-color: #f4f4f4;
   }

   header, footer {
       background-color: #333;
       color: #fff;
       text-align: center;
       padding: 10px 0;
   }

   .user-info {
       max-width: 600px;
       margin: 20px auto;
       background: #fff;
       padding: 20px;
       border-radius: 8px;
       box-shadow: 0 0 10px rgba(0,0,0,0.1);
   }

   .user-photo {
       width: 100px;
       height: auto;
       border-radius: 50%;
   }
   ```

3. **Модульность PHP-кода**:
   - Разделите логику PHP на функции или классы для улучшения читаемости и повторного использования.
   - Например, создайте функции для получения информации о пользователе и их фотографий.

Следуя этим рекомендациям, вы не только завершите сессию корректно, но и улучшите структуру и читабельность кода вашей веб-страницы.
Общая логика (если Вы профиль храните в сессионной переменной): Вижу, что Вы используете USER_ID, отсюда предполагаем, что пользователь у Вас логинится, так Вот в момент успешного залогинивания, Вы из БД заполняете сессионную переменную, в том числе и городом. 
Ну и в момент изменения(записи) города, обновляете в 2х местах сразу и в сессионной переменной и в БД.
Плюс очень странная конструкция if(empty($_POST['city'])) и запись в БД, пустого значения ?
Полагаю, что структура сессионной переменной по факту отличается от того, что Вы в ней ожидаете, попробуйте var_dump($_SESSION); Как раз и Выясните что происходит
Похожие вопросы