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

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

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

Ответы [ 7 ]

12 голосов
/ 25 апреля 2011

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

12 голосов
/ 25 апреля 2011

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

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

3 голосов
/ 25 апреля 2011

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

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

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

3 голосов
/ 25 апреля 2011

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

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

0 голосов
/ 18 декабря 2014

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

Общий подход, позволяющий вам вызывать его только один раз, - это иметь файл диспетчера в качестве индекса.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
0 голосов
/ 15 сентября 2013

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

0 голосов
/ 29 марта 2013

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...