4日目 4-4

https://chat.openai.com/share/1fde2f6b-0b35-4c7e-ad4c-ae1ac376288a

Chat GPTの回答

クライアント側とサーバ側のコードを正しく修正するために、以下の点を行います。

クライアント側コードの修正点:

1.onclick属性で直接logout.phpに遷移するのではなく、JavaScriptを使用してログアウト処理をAPIにリクエストするように変更します。

2.ボタンクリック時に非同期リクエストを行い、成功した場合にはログインページにリダイレクトするようにします。

サーバ側コードの修正点:

1.サーバ側でログアウト処理を行うエンドポイントを追加します。

2.GETリクエストを受けた時にセッションを破棄し、クライアントに成功の応答を返すようにします。

完全な修正済みコード:

クライアント側 (HTML + JavaScript):


<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
    <style>
        body, header, .logout-button, footer, .content {
            /* CSS省略 */
        }
    </style>
    <script>
        function logout() {
            fetch('/logout', { method: 'GET' })
            .then(response => response.json())
            .then(data => {
                if (data.success) {
                    window.location.href = '/login';
                } else {
                    alert('ログアウトに失敗しました。');
                }
            })
            .catch(error => {
                console.error('Error:', error);
                alert('ログアウト処理中にエラーが発生しました。');
            });
        }
    </script>
</head>
<body>
    <header>
        <h1>Dashboard</h1>
        <button class="logout-button" onclick="logout()">ログアウト</button>
    </header>
    <p class="content">Welcome to your Dashboard!</p>
    <footer>
        <p>© 2024 Company, Inc.</p>
    </footer>
</body>
</html>


サーバ側 (Node.js + Express):


const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const mysql = require('mysql');
const bcrypt = require('bcrypt');
require('dotenv').config();

const app = express();
const port = 3000;

const pool = mysql.createPool({
  // データベース設定省略
});

app.use(session({
  secret: 'your_secret_key',
  resave: false,
  saveUninitialized: true
}));
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(express.static('public'));

// ルーティング設定省略

// ログアウト処理
app.get('/logout', (req, res) => {
  req.session.destroy(err => {
    if (err) {
      console.log(err);
      res.status(500).json({ success: false });
    } else {
      res.json({ success: true });
    }
  });
});

app.listen(port, () => {
  console.log(`サーバーがポート ${port} で稼働しています`);
});


これでクライアント側からログアウトボタンを押すと、サーバ側でセッションが破棄され、クライアントはログインページにリダイレクトされます。