Урок 12: Сессии

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

Это очень важно учитывать при создании успешных вэб-проектов.

Предположим, например, что вы хотите создать сайт, на котором несколько страниц защищены логином и паролем. Чтобы эта защита действовала эффективно, защищённые паролем страницы должны иметь доступ к информации о том, зашёл ли пользователь ранее в систему. Вы должны, иначе говоря, "помнить", что пользователь делал до этого.

Именно об этом наш урок - как использовать сессии в PHP для сохранения и получения информации в процессе визита пользователя на наш сайт.

Сессии

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

Сессии могут начинаться разными способами. Мы не будем углубляться в технические тонкости, а сконцентрируемся на варианте, когда сессия начинается с сохранения значения. Сессия заканчивается/загибается (dies), если пользователь не запрашивает страниц в течение какого-то времени (стандартное значение - 20 минут). Разумеется, вы в любой момент можете закончит/убить сессию в вашем скрипте.

Скажем, 50 пользователей просматривают страницы одного сайта, например, вэб-шоп. Информацию о том, что у каждого посетителя в корзине, лучше всего сохранить в сессии. Чтобы идентифицировать пользователей, сервер использует уникальные пользовательские идентификаторы/user ID, которые хранятся в куках. Кука это небольшой текстовый файл, хранимый на компьютере пользователя (см. Урок 13). Следовательно, сессии часто требуют поддержки кук в браузерах пользователей.

Пример использования сессий

Если вы запрашиваете эту страницу, я сохраняю текущее время в сессии. Я сделал это и могу теперь показать вам пример работы сессии.

Я назвал элемент "StartTime" и сохранил его, добавив следующую строку в мой РНР-скрипт:


	<?php

	session_start();
	$_SESSION["StartTime"] = date("r");

	?>
	
	

Таким образом, сессия началась. Как сказано выше, каждая сессия получает ID от сервера.

Ваша сессия имеет следующий ID: gn8lp3a0juljclk9e6lrsgqcc3

В любое время я могу вызвать "StartTime" из сессии, введя:


	<?php

	session_start();
	echo $_SESSION["StartTime"];

	?>
	
	

что покажет, что страница была запрошена в (в соответствии с временем данного вэб-сервера).

Но интересно, штаа эта информация остаётся в сессии, даже после выхода со страницы. Эта информация будет сопровождать вас, пока ваша сессия не завершится.

По умолчанию сессия длится, пока пользователь не закроет окно браузера, и тогда она загибается автоматически. Но если вы хотите принудительно завершить сессию, её всегда можно замочить таким образом:


	<?php

	session_destroy();

	?>
	
	

Посмотрим другой пример использования сессий: с паролем.

Логин в систему с сессиями

В следующем примере мы создадим простейшую систему с логином. Используем многое из того, что изучили на предыдущих занятиях.

Первое, что необходимо, это форма, в которой люди могу указывать username и password. Она может выглядеть так:


	<html>
	<head>
	<title>Login</title>

	</head>
	<body>
	<form method="post" action="login.php">

	<p>Username: <input type="text" name="username" /></p>
	<p>Password: <input type="text" name="password" /></p>

	<p><input type="submit" value="Let me in" /></p>

	</form>
	</body>
	</html>

	
	

Затем создадим файл login.php.

В этом файле мы проверяем, введены ли корректные username и password. Если это так, мы начинаем сессию, в которой указано, что пользователь вошёл с корректными username и password.

	<html>

	<head>
	<title>Login</title>

	</head>
	<body>
	
	<?php

	// Проверить корректность username и password
	if ($_POST["username"] == "php" && $_POST["password"] == "php") {
	 
	// Если корректны, устанавливаем значение сессии в YES
	  session_start();
	  $_SESSION["Login"] = "YES";
	  echo "<h1>Вы зашли некорректно</h1>";
	  echo "<p><a href='document.php'>Ссылка на защищённый файл</a><p/>";
	 
	}
	else {
	 
	// Если некорректны, устанавливаем сессию в NO
	  session_start();
	  $_SESSION["Login"] = "NO";
	  echo "<h1>Вы зашли НЕкорректно </h1>";
	  echo "<p><a href='document.php'>Ссылка на защищённый файл</a><p/>";
	 
	}

	?>

	</body>
	</html>

	
	

При работе с защищёнными файлами мы проверяем, вошёл ли пользователь с корректным логином. Если нет, the пользователь отправляется обратно к логин-форме. Вот как делается эта защита:


	<?php

	// Начать вашу РНР-сессию
	session_start();

	// Если пользователь не зашёл, отправить его/её к логин-форме
	if ($_SESSION["Login"] != "YES") {
	  header("Location: form.php");
	}

	?>

	<html>
	<head>
	<title>Логин</title>
	</head>

	<body>
	<h1>Этот документ защищён</h1>

	<p>Вы можете получить к нему доступ, только если вошли в систему.</p>
	</body>
	</html>
	
	

Вы получили представление об объекте Session. В следующем уроке мы продолжим работу в этом же направлении, но также подробнее познакомимся с куками.



<< Урок 11: Передача переменных через формы

Урок 13: Куки >>