Для решения вашей задачи можно использовать подход с изменением логики обработки сессий и управления пользователем в зависимости от страницы, на которой он находится.
### Предложенное решение:
1. **Добавьте параметр в запрос при размещении кнопки на странице профиля**:
Когда пользователь кликает на кнопку подключения/отключения кошелька, вы можете добавлять дополнительный параметр в запрос (например, `fromProfile=true`). Это может помочь определить, с какой страницы пришел запрос.
2. **Измените логику на сервере**:
На стороне сервера вы можете обрабатывать запрос в зависимости от наличия этого параметра. Если параметр `fromProfile` присутствует и статус подключения активен, вы можете оставить пользователя на странице профиля вместо перенаправления на `index.php`.
3. **Измените обработчик события для кнопки**:
Убедитесь, что ваш обработчик события для кнопки подключенного/отключенного кошелька учитывает страницу, на которой происходит событие:
```javascript
async function onConnectClick(fromProfile) {
const walletAndwalletInfo = await tonConnectUI.getWalletInfo();
const isConnected = tonConnectUI.connected;
if (isConnected) {
console.log("Подключен к аккаунту:", walletAndwalletInfo.account);
// Отправить данные на сервер с учетом страницы
const data = {
query_id: tg.initDataUnsafe.query_id,
fromProfile: fromProfile || false // передаем параметр
};
await fetch('/your-server-endpoint', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
});
if (!fromProfile) {
window.location.href = "index.php"; // Перенаправление только если не с профиля
}
} else {
// Удаление сессии в случае, если подключение не активно
await fetch('/logout.php');
window.location.href = "auth.php"; // Перенаправление на страницу авторизации
}
}
```
4. **Обработка на сервере**:
На сервере вы можете добавить условие:
```php
if ($isConnected) {
if (isset($_POST['fromProfile']) && $_POST['fromProfile'] === 'true') {
// Остаёмся на профиле, не перенаправляем
} else {
// Перенаправляем на index.php
header('Location: index.php');
exit();
}
} else {
// Логика для отключения
}
```
### Дополнительные методы управления сессиями:
- **Используйте элементы управления сессией**: Можно создать отдельные скрипты для управления состоянием подключения и сессии (например, отдельные AJAX-запросы для подключения и отключения).
- **Состояния сессий**: Четко определите состояния сессии (например, `connected`, `disconnected`, `idle` и т. д.) и используйте их для определения нужного поведения на каждой странице.
- **Consult user feedback**: Добавьте кнопку "Выйти" в области сессии, чтобы пользователь мог вручную выйти из своей сессии, если это необходимо.
Эти подходы помогут избежать перенаправлений и упростят управление состоянием сессии для вашего приложения.