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

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

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

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

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

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

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

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

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

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

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

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

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

Я был смущен использованием 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(); только один раз на самой верхней части страницы, и все, кажется, работает нормально.

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

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

 <?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