Я реализовал обработку сеансов и форму входа, чтобы ограничить доступ к определенным страницам, таким как панель управления. Логика сеанса и форма входа обрабатываются в common.php с помощью кода ниже
Login
const sessionMonitor = {
checkInterval: 15000, // Check every 15 seconds
timeoutDuration: 70000, // 70 seconds for demo purposes
lastActivity: Date.now(),
sessionExpired: false, // Flag to stop further checks after session expiration
init: function() {
// Check if inside iframe
if (window.self !== window.top) {
console.log("Inside iframe, skipping session checks.");
return; // Skip session monitoring if in iframe
}
console.log("Not in iframe, starting session monitor.");
// Set up activity listeners
['mousedown', 'keydown', 'scroll', 'touchstart'].forEach(eventType => {
document.addEventListener(eventType, () => this.updateActivity());
});
// Start the check interval
this.startChecking();
},
updateActivity: function() {
if (!this.sessionExpired) {
this.lastActivity = Date.now();
}
},
startChecking: function() {
this.checkIntervalID = setInterval(() => this.checkSession(), this.checkInterval);
},
checkSession: function() {
// Check if user has been inactive
if (Date.now() - this.lastActivity >= this.timeoutDuration && !this.sessionExpired) {
fetch('check_session.php')
.then(response => response.json())
.then(data => {
console.log(data.status);
if (data.status === 'expired') {
this.sessionExpired = true; // Set the flag to stop further checks
clearInterval(this.checkIntervalID); // Stop the interval to prevent further refreshes
window.location.href = window.location.href; // Refresh the page
}
})
.catch(error => console.error('Session check failed:', error));
}
}
};
// Initialize the session monitor when the page loads
document.addEventListener('DOMContentLoaded', () => sessionMonitor.init());
И это включено в Dashboard.php как:
Когда я вхожу в систему, меня успешно перенаправляет на панель управления, и я могу просматривать содержимое страницы, как и ожидалось. Однако я столкнулся с проблемой при ручном вводе или обновлении URL-адреса в адресной строке браузера. Если я напрямую получаю доступ к URL-адресу Dashboard.php (например, вводя его в адресную строку или обновляя страницу), сеанс кажется потерянным, и я перенаправляюсь обратно к форме входа в систему.
Похоже, что сеанс не сохраняется при перезагрузке страницы или прямом доступе к URL-адресу. Я не уверен, чего мне не хватает в логике обработки сеанса, и был бы признателен за любые рекомендации о том, как это исправить, чтобы сеанс оставался активным при прямом доступе к URL-адресу.
Вот check_session.php
Подробнее здесь: https://stackoverflow.com/questions/791 ... pplication
Проблема с сохранением сеанса и перенаправлением входа в систему в приложении PHP ⇐ Php
Кемеровские программисты php общаются здесь
1729793317
Anonymous
Я реализовал обработку сеансов и форму входа, чтобы ограничить доступ к определенным страницам, таким как панель управления. Логика сеанса и форма входа обрабатываются в common.php с помощью кода ниже
Login
const sessionMonitor = {
checkInterval: 15000, // Check every 15 seconds
timeoutDuration: 70000, // 70 seconds for demo purposes
lastActivity: Date.now(),
sessionExpired: false, // Flag to stop further checks after session expiration
init: function() {
// Check if inside iframe
if (window.self !== window.top) {
console.log("Inside iframe, skipping session checks.");
return; // Skip session monitoring if in iframe
}
console.log("Not in iframe, starting session monitor.");
// Set up activity listeners
['mousedown', 'keydown', 'scroll', 'touchstart'].forEach(eventType => {
document.addEventListener(eventType, () => this.updateActivity());
});
// Start the check interval
this.startChecking();
},
updateActivity: function() {
if (!this.sessionExpired) {
this.lastActivity = Date.now();
}
},
startChecking: function() {
this.checkIntervalID = setInterval(() => this.checkSession(), this.checkInterval);
},
checkSession: function() {
// Check if user has been inactive
if (Date.now() - this.lastActivity >= this.timeoutDuration && !this.sessionExpired) {
fetch('check_session.php')
.then(response => response.json())
.then(data => {
console.log(data.status);
if (data.status === 'expired') {
this.sessionExpired = true; // Set the flag to stop further checks
clearInterval(this.checkIntervalID); // Stop the interval to prevent further refreshes
window.location.href = window.location.href; // Refresh the page
}
})
.catch(error => console.error('Session check failed:', error));
}
}
};
// Initialize the session monitor when the page loads
document.addEventListener('DOMContentLoaded', () => sessionMonitor.init());
И это включено в Dashboard.php как:
Когда я вхожу в систему, меня успешно перенаправляет на панель управления, и я могу просматривать содержимое страницы, как и ожидалось. Однако я столкнулся с проблемой при ручном вводе или обновлении URL-адреса в адресной строке браузера. Если я напрямую получаю доступ к URL-адресу Dashboard.php (например, вводя его в адресную строку или обновляя страницу), сеанс кажется потерянным, и я перенаправляюсь обратно к форме входа в систему.
Похоже, что сеанс не сохраняется при перезагрузке страницы или прямом доступе к URL-адресу. Я не уверен, чего мне не хватает в логике обработки сеанса, и был бы признателен за любые рекомендации о том, как это исправить, чтобы сеанс оставался активным при прямом доступе к URL-адресу.
Вот check_session.php
Подробнее здесь: [url]https://stackoverflow.com/questions/79123113/issue-with-session-persistence-and-login-redirect-in-php-application[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия