Как вы можете проверить, существует ли сессия PHP?

Просто интересно, как проверить, существует ли PHP-сессия … Я понимаю, что независимо от того, что, если я использую сеансы, я должен запустить свои файлы с session_start (), чтобы даже получить доступ к сеансу, даже если я знаю, что он уже существует ,

Я прочитал пользователю session_id (), чтобы узнать, существует ли сеанс, но поскольку я должен использовать session_start () перед вызовом session_id (), а session_start () создаст новый идентификатор, если сеанс отсутствует, как могу ли я проверить, существует ли сеанс?

В версиях PHP до 5.4 вы можете просто использовать функцию session_id() :

 $has_session = session_id() !== ''; 

В PHP версии 5.4+ вы можете использовать session_status() :

 $has_session = session_status() == PHP_SESSION_ACTIVE; 
 isset($_SESSION) 

Это должно быть так. Если вы хотите проверить, существует ли одна переменная сессии, используйте if(isset($_SESSION['variablename'])) .

В PHP есть что-то, называемое именем сеанса. Имя связано с куки-файлом, которое будет установлено, если сеанс уже запущен.

Таким образом, вы можете проверить массив $_COOKIE если есть доступ к cookie сеанса. Обычно файлы cookie являются предпочтительной формой для обмена идентификатором сеанса для имени сеанса с браузером.

Если файл cookie уже существует, это означает, что сеанс PHP был запущен ранее. Если нет, то session_start() создаст новый идентификатор сеанса и сеанс.

Второй способ проверить это – проверить исходящие заголовки, если там установлен файл cookie для сеанса. Он будет установлен, если это новый сеанс. Или если идентификатор сеанса изменился.

Я нахожу это много раз (в зависимости от характера приложения), чтобы просто проверить, установлен ли в клиенте cookie сеанса:

 <?php if (isset($_COOKIE["PHPSESSID"])) { echo "active"; } else { echo "don't see one"; } ?> 

Конечно, замените имя сеанса по умолчанию «PHPSESSID» на любой пользовательский, который вы используете.

isset ($ _ SESSION) недостаточно, потому что если сеанс был создан и уничтожен (с session_destroy() ) в одном и том же исполнении, isset ($ _ SESSION) вернет true . И эта ситуация может произойти, если вы не знаете об этом, когда используется сторонний код. session_id() корректно возвращает пустую строку, но может быть вызвана до session_start() .

Вы можете вызвать session_id перед session_start. http://www.php.net/manual/en/function.session-id.php – прочитайте параметр id

Я всегда просто использовал

 if (@session_id() == "") @session_start(); 

Еще не подвел меня.

Это довольно долгое время.

ПРИМЕЧАНИЕ . @ Просто подавляет предупреждения.

Сохраните session_id в $_SESSION и проверьте его.

Первый раз

 session_start(); $_SESSION['id'] = session_id(); 

Запускает сеанс и сохраняет случайный идентификатор сеанса.

В следующий раз

 session_start(); $valid_session = isset($_SESSION['id']) ? $_SESSION['id'] === session_id() : FALSE; if (!$valid_session) { header('Location: login.php'); exit(); } 

Запускает сеанс, проверяет, идентичны ли текущий идентификатор сеанса и сохраненный идентификатор сеанса (с тройной заменой несуществующего короткого замыкания AND на php). Если нет, запросите логин снова.

отключите отчет об ошибках, если примечание работает в вашей версии php, положите верхнюю часть на ваш php-код

error_reporting(0);

Проверьте, существует ли сеанс до вызова session_start ()

 if(!isset($_SESSION))session_start(); 

Я решил это три года назад, но я случайно удалил файл с моего компьютера.

так оно и было. 3 страницы, которые пользователь должен был посетить в том порядке, в котором я хотел.

1) вверху каждой php-страницы enter code here session start (); enter code here 2) первая страница: a) enter code here $ _session ["timepage1"] = функция даты php; time () простой в использовании b) enter code here $ _session ["timepage2"] = $ _session ["timepage1"]; b) enter code here $ _session ["timepage3"] = $ _ session ["timepage1"]; 3) вторая страница: a) enter code here $ _session ["timepage2"] = функция даты php; time () простой в использовании b) enter code here $ _session ["timepage3"] = $ _session ["timepage3"]; 3) Третья страница: а) enter code here $ _session ["timepage3"] = функция даты php; time () простой в использовании

логика: если timepage3 меньше, чем timepage3 на странице 2 (пользователь перешел на страницу 3 до того, как страница 2 сделала что-то}

если timepage2 на странице 2 меньше, чем timepage1 {пользователь может пытаться взломать страницу два, мы хотим, чтобы они на странице 1 сделали что-то}

timepage1 никогда не должна равняться timepage2 или timepage3 на любой странице, кроме page1, потому что, если она не больше на страницах два или три, пользователь может попытаться взломать «сделать что-то»,

вы можете делать сложные вещи с простой арифметикой с тремя переменными timepage1-2-3. вы можете либо перенаправить, либо отправить сообщение, пожалуйста, перейдите на страницу 2. вы также можете указать, если пользователь пропустил страницу 2. затем вернитесь на страницу 2 или на первую страницу, но лучшая функция безопасности не говорит ничего, что нужно перенаправить обратно на страницу1.

если вы enter code here echo time (); на каждой странице во время тестирования вы увидите последние 3 цифры, если вы заходите в правильном порядке.

этот код может помочь!

 <?php session_start(); if(isset($_SESSION['visit'])) { echo "you have visit this page before!"; } else { echo "Welcome In Our Site"; $_SESSION['visit'] = 1; } ?>