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

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

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

Ответ 1

В версиях PHP до 5.4 вы можете просто session_id():

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

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

$has_session = session_status() == PHP_SESSION_ACTIVE;

Ответ 2

isset($_SESSION)

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

Ответ 3

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

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

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

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

Ответ 4

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

<?php

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

?>

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

Ответ 5

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

Ответ 7

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

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

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

Прошло довольно много времени, используя это.

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

Ответ 8

Сохраните 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). Если нет, попросите войти снова.

Ответ 9

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

error_reporting(0);

Ответ 10

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

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

Ответ 11

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

все прошло так. 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) третья страница:   a) enter code here $_ session [ "timepage3" ] = функция даты php; time() простой в использовании

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

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

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

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

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

Ответ 12

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

<?php 


    session_start();



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


    ?>