Задать вопрос
@Chesterfield25

Как правильно работать с сессиями?

Суть вопроса в следующем у меня в мини приложение есть подключение с помощью тон кошелька на странице auth.php и если его статус подключен то у нас создается сессия и идет перенаправление на index.php, иначе если статус кошелька отключен то у нас идет запрос на logout.php для удаления сессии и перенаправление на страницу авторизации. Но так получилось что мне саму кнопку кошелька <div id="connect-wallet"></div> нужно разместить на странице профиля что бы пользователь мог сделать выход то меня перенаправляет на index.php так как сессия активна а мне этого не как не нужно. А если я размещу кнопку в index.php то идет постоянная перезагрузка страницы. Как это все дело можно подкорректировать что бы если я размещал кнопку на странице профиля то перенаправление на index.php не происходило?

Вот код скрипта

async function init() {
    // Проверка доступности Telegram WebApp API
    if (!window.Telegram || !window.Telegram.WebApp) {
        console.error('Telegram WebApp API недоступен.');
        return;
    }

 
    // Подписка на изменения статуса подключения кошелька
    const unsubscribe = tonConnectUI.onStatusChange(async (walletAndwalletInfo) => {
    const currentAccount = walletAndwalletInfo?.account;
    const currentWalletInfo = walletAndwalletInfo?.walletInfo;
    const isConnected = tonConnectUI.connected;

        if (isConnected) {
            console.log("Текущий аккаунт:", currentAccount);

            // Формируем данные для отправки на сервер
            const usersData = {
                query_id: tg.initDataUnsafe.query_id,
                user: {
                    id: userInfo.id,
                    first_name: userInfo.first_name,
                    last_name: userInfo.last_name,
                    username: userInfo.username,
                    language_code: userInfo.language_code
                },
                referrer_id: referrerId,
                ref_url: referralLink,
                auth_date: tg.initDataUnsafe.auth_date,
                hash: tg.initDataUnsafe.hash,
                wallet_address: currentAccount.address
            };

            console.log('Generated User Data:', usersData);

            // Отправка данных на сервер
            await sendUserDataToDB(usersData);
        } else {
            // Запрос к серверу для очистки сессии
                fetch('./logout.php', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json'
                    }
                })
                .then(response => response.json())
                .then(data => {
                    if (data.status === 'success') {
                        console.log('Сессия успешно завершена на сервере.');
                        // Перенаправление на auth.php
                        setTimeout(() => {window.location.href = './auth.php'}, 500);
                    } else {
                        console.error('Ошибка при завершении сессии на сервере.');
                    }
                })
                .catch(error => {
                    console.error('Ошибка сети при запросе на logout.php:', error);
                });
        }
    });
}

// Функция для отправки данных на сервер
async function sendUserDataToDB(usersData) {
    try {
        const response = await fetch('./auth_post.php', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(usersData)
        });

        if (response.ok) {
            const data = await response.json();
            if (data.status === 'success') {
                console.log('Пользователь успешно авторизован.');
                 setTimeout(() => {window.location.href = './index.php'}, 500); // Перенаправление на указанный URL
            } else {
                console.error('Ошибка авторизации:', data);
            }
        } else {
            console.error('Ошибка сервера:', await response.text());
        }
    } catch (error) {
        console.error('Ошибка при отправке данных:', error);
    }
}


// Инициализация
init();


Пробовал добавить код который не перенаправляет на index.php если находится на определенных страницах
// Список страниц, на которых не должно происходить перенаправление
        const excludedPages = ["profile.php", "ico.php"];

    // Проверка текущего URL
        const currentUrl = window.location.href;

    // Проверяем, если текущий URL соответствует одной из исключённых страниц
        const isExcludedPage = excludedPages.some(page => currentUrl.includes(page));

                   // Перенаправление на index.php, только если это не одна из исключённых страниц
                   if (!excludedPages.some(page => window.location.href.includes(page))) {
                       setTimeout(() => {window.location.href = './index.php'}, 500);
                   }

но теперь если я нахожусь на auth.php с подключенным кошельком то меня не перенаправляет автоматически на index.php а только после перезагрузки страницы.
  • Вопрос задан
  • 52 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы