У меня есть защищенная паролем область сайта, который я использую Сессии, чтобы позволить пользователю перемещать от страницы до страницы защищенной области. Однако, если я открываюсь, новая вкладка ВСЕ ЖЕ сохраняют другую вкладку открытой (та в защищенной области) и затем делают somethings на новой вкладке и переключаются тогда на старую вкладку, я вынужден к входу в систему ре. Я попытался установить дату истечения срока на двадцать минут между сессиями, но у меня нет удачи. Какие-либо идеи?
// set expiration time of 20 mins
session_cache_expire (20);
$cache_expire = session_cache_expire();
Является ли защищенная область подкаталогом url, который вы загружаете в другой вкладке? Это может привести к тому, что куки будут испорчены, потому что первый куки может быть установлен для более конкретного пути, чем url второй страницы, поэтому начинается новая сессия.
Этот парень объясняет это лучше:
http://www.php.net/manual/en/function.session-start.php#91298
Если два разных файла не имеют доступа к к одному и тому же сеансу, это может означать только одно одно: они не находятся на одном уровне каталога. Примеры: a) Один находится под https, а другой - под http. (очень распространенная и раздражающая ошибка) b) Один находится под /, другой под /dir1, и /dir1 был запущен первым. Куки cookie, созданный сессией, предназначен только для только для /dir1 и глубже, поэтому другой скрипт не может прочитать его; он не видит никакой сессию, поэтому начинает новую.
Решения:
1) Начало сессии должно всегда происходить в корневом каталоге. Если один из ваших скриптов обнаруживает, что пользователь не вошел в систему, например, используйте session_destroy() и отправьте его на страницу login в корневой каталог. Скрипты, которые используют сессию, не требуя входа в систему требуют более творческих решений, таких как перенаправление в корневой каталог, установка сессию и перенаправление обратно.
2) Используйте SID от страницы к странице, вместо cookies. Преимущество в том, что это также работает с http/https. Недостатком является очень уродливые коды URL и более сложная поддерживаемость ("какие страницы ссылаются на gallery.php без использования SID?!").