Для извлечения пользователя с моего сайта я перенаправляю страницу на 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