Функция PHP session_start(): зачем мне это нужно каждый раз, когда я использую что-либо, связанное с сеансами PHP

Чтобы вывести пользователя из моего сайта, я перенаправляю страницу на logout.php, где я использую функцию session_destroy(). Даже там, кроме того, функция выхода из системы не работает без функции session_start(). Добавляя функцию session_start() до функции session_destroy(), я могу успешно выйти из системы.

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

Ответ 1

session_destroy() уничтожает активный сеанс. Если вы не инициализировали сеанс, ничего не будет уничтожено.

Ответ 2

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

Итак, PHP знает, какую сессию уничтожить. session_start() показывает, существует ли файл cookie сеанса или идентификатор. Только с этой информацией вы можете ее уничтожить.

Ответ 3

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

session_start() также сообщает PHP, чтобы узнать, существует ли сеанс пользователя.

Ответ 4

session_start() создает сеанс или возобновляет текущий на основе идентификатор сеанса, переданный через GET или POST или передается через файл cookie.

согласно http://php.net/manual/en/function.session-start.php

По существу, вызывая session_start(), PHP читает заголовок и перекрестно ссылается на идентификатор сеанса на то, что находится в вашей системе (файловая система/база данных и т.д.), который затем может заполнять $_SESSION, который относится к этому конкретному пользователю, Это, в свою очередь, позволяет вам вызвать session_destroy(), потому что он знает, какой сеанс действительно уничтожить.

Ответ 5

рассмотрите session_start() как ваш способ сообщить движку php..., что вы хотите работать с сеансами.

и, как я понимаю, всегда делайте это первой линией на php-странице.

Ответ 6

Меня смутило использование session_start(); и каждый раз, когда я использовал переменную сеанса, я вызывал session_start. Точно, у меня был session_start(); более одного раза на каждой странице (даже не вызывая session_destroy()). Например,

// 1st call
session_start();

if (!isset($_SESSION['UserID']))    
{       
    // Do something    
}

else
{
   // Do something else
}

// .... some other code

// 2nd call
session_start();

if (!isset($_SESSION['UserID']))    
{       
    // Do something totally different   
}

else
{
   // Do something else totally different
}

Это создало проблему производительности для меня. Поэтому я в конечном итоге набрал session_start(); только один раз на самой верхней части страницы, и все, кажется, работает нормально.

Ответ 7

Вы должны вызывать session_start один раз (и только один раз) в каждом файле, в котором вы хотите работать.

Общим подходом, позволяющим только вызывать его один раз, является наличие файла диспетчера в качестве index.php; вызовите session_start здесь, и на этой странице есть другие, основанные на URL $_GET.

<?php
    session_start();
    if(isset($_GET['page']) && file_exists('pages/'.$_GET['page'].'.php') {
        include $_GET['page'];
    }
?>
//www.mysite.com/index.php?page=fish will display /pages/fish.php with session access