2010-10-25 4 views
15

Что это на самом деле?PHP session_start()

Запускает ли текущий сеанс на основе файлов cookie? Получил это с веб-сайта PHP. Как PHP контролирует сеанс? Если я начну сеанс, когда пользователь откроет мою страницу входа в систему, для чего я вообще использую этот сеанс? Можно ли использовать текущий сеанс для получения информации о зарегистрированном пользователе?

ответ

17

Система PHP сессии позволяет хранить данные надежно в $_SESSION глобального массива. Типичным примером может служить для хранения идентификатора пользователя в сеансе, когда они печатают их пароль:

if ($user = try_login($login, $password)) 
    $_SESSION['user'] = $user; 

Затем, вы можете получить доступ к этой информации на всех других страницах:

if (isset($_SESSION['user'])) 
    // logged in ! 
    echo user_name($_SESSION['user']); 

Данные хранятся на сервера, поэтому нет риска вмешательства (с другой стороны, учитывайте использование вашего диска).

Запуск сеанса позволяет текущему запросу использовать $_SESSION. Если это первый визит пользователя, массив будет пустым, и для вас будет отправлен новый файл cookie сеанса.

Закрытие сеанса просто предотвращает использование текущего запроса $_SESSION, но данные сохраняются для следующих запросов.

Уничтожение сеанса отбрасывает все данные навсегда. После последнего посещения сеансы уничтожаются определенной продолжительностью (обычно около 30 минут).

+0

Oooh okay. Таким образом, это пустой глобальный массив, который вы можете использовать для хранения пользовательских значений (или других значений) для сохранения их уникального опыта на веб-сайте. – Scott

2

session_start PHP начинает или возобновляет НТТР сеанс, что объясняется достаточно хорошо в этой статье:

http://en.wikipedia.org/wiki/Session_(computer_science)

Понятие «сессии» HTTP не является специфическим для PHP, он используется во многих (все?) серверные HTTP-серверы как один из способов, позволяющих сохранять или связывать какое-либо состояние в разных запросах и ответах (поскольку HTTP не имеет состояния). Уникальный токен (который часто, но не всегда, сохраняется в файле cookie) идентифицирует конкретного клиента, и сервер может связывать «сеанс».

Вот еще информация о сессиях и PHP в частности, которые могут помочь: http://www.php.net/manual/en/book.session.php

2

Как говорится в Руководстве

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

Если вы начинаете новый сеанс на своей странице входа, сеанс изначально пуст. Вы можете хранить в нем все, что хотите, например, хранить идентификатор пользователя после входа пользователя. Данные сеанса уничтожаются при закрытии сеанса.

Вы можете прочитать все главы в Session Extension Manual Pages, а также увидеть

9

Я предполагаю, что вы хотите знать, что означает сеанс PHP для вас, программист.

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

Фактический механизм может отличаться в зависимости от конфигурации (php.ini), но в типичной установке могут использоваться файлы cookie для сеанса. Предположим, что ваш веб-сервер находится в Linux, и вы используете файлы cookie. Вы делаете следующее

session_start(); 
$_SESSION['name']='Bob'; 

Когда PHP видит это, он создает текстовый файл с полом-случайным именем (например, sess_a3tfkd5558kf5rlm44i538fj07), вставляет содержимое $ _SESSION в там в виде простого текста, а затем отправляет куки пользователя с идентификатором сеанса, который можно использовать для поиска файла сеанса (например, a3tfkd5558kf5rlm44i538fj07).

В следующий раз, когда пользователь возвращается, он передает идентификатор сеанса в свой файл cookie, PHP переходит в соответствующий файл и загружает его содержимое в $ _SESSION.

Вы заметите, что фактическая информация хранится на сервере, пока пользователю предоставляется только идентификатор. Как будто сдавать пальто в клубе и получать билет с номером на нем.

+0

, так что если я начинаю сеанс на каждой странице, как PHP знает, чтобы поддерживать ту же информацию из переменной $ SESSION с последней страницы, это cookie? – Scott

+1

@Scott. Если у пользователя есть файл cookie с идентификатором сеанса, совпадающим с существующим сеансом (существующий файл сеанса), session_start() возобновляет сеанс. В противном случае он начинает новый. –

0

Вы можете сравнить сеанс PHP с файлом cookie, но сеанс - это гораздо более безопасный способ хранения информации. Файлы cookie хранят данные на компьютере пользователя, но хранятся в хранилище на сервере во временном файле. Я обсуждал сессии и как использовать его на одном из моих блоге - How to start a PHP session, store and accessing Session data?

Ниже приведен пример кода для хранения данных в PHP сессии:

<?php 
session_start(); 
$_SESSION["name"] = "John"; 
?> 

Ниже приведен пример retriving данных сеанса :

<?php 
session_start(); 
echo $_SESSION["name"]; 
?> 

Приведенный выше код отобразит имя «Джон».

How to start a PHP session, store and accessing Session data?