Проблема следующая:
В приватной вкладке мой сайт, который открыт в Iframe Яндекса в качестве приложения не сохраняются сессии, которые я устанавливаю в PHP коде.
На странице авторизации (на PHP) устанавливаю сессию логина и пароля, переадресовываю на страницу, где идет сверка данных сессий, но их нет, сессии пустые.
В обычной вкладке все работает.
Так же если открыть свой сайт в приватной вкладке, но вне Iframe, то сессия тоже держится и работает.
То есть сессия не держится, если сайт открыт в качестве Iframe в приватной вкладке.
Поддержка Яндекса откровенно послала, типа ваши проблемы, вы и разбирайтесь с ними.
Попробовал решить проблему через Javascript и
sessionStorage
, но не помогает.
Написал следующий код, но и он не работает:
// для сохранения данных в сессии
function saveDataToSession(login, pass) {
if (sessionStorage) {
sessionStorage.setItem('log', login);
sessionStorage.setItem('par', pass);
}
}
// для получения данных из сессии
function getDataFromSession() {
if (sessionStorage) {
let login = sessionStorage.getItem('log');
let pass = sessionStorage.getItem('par');
return {
login: login,
pass: pass
};
}
}
// для проверки наличия данных сессии в приватной вкладке браузера
function checkDataInPrivate() {
if (sessionStorage) {
let forceSave = sessionStorage.getItem('forceSave');
if (forceSave) {
return true;
}
}
return false;
}
// для принудительного включения сохранения данных сессии
function forceSaveDataToSession(data) {
if (sessionStorage) {
sessionStorage.setItem('data', JSON.stringify(data));
sessionStorage.setItem('forceSave', true);
}
}
// для проверки и поддержания данных сессии в браузере
function checkAndSaveDataToSession() {
let data = getDataFromSession();
if (data) {
if (checkDataInPrivate()) {
forceSaveDataToSession(data);
} else {
saveDataToSession(data.login, data.pass);
}
}
}
// для установки данных сессии в PHP
function setDataInPHP(login, pass) {
$_SESSION['log'] = login;
$_SESSION['par'] = pass;
}
// для инициализации данных сессии
function initSessionData() {
let data = getDataFromSession();
if (data) {
setDataInPHP(data.login, data.pass);
}
}
// для вызова инициализации данных сессии
initSessionData();
</script>