Skip to content

Instantly share code, notes, and snippets.

@FoggyK
Created August 7, 2017 17:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save FoggyK/5ffb753a7a1615e901f9e2a6a070bef3 to your computer and use it in GitHub Desktop.
Save FoggyK/5ffb753a7a1615e901f9e2a6a070bef3 to your computer and use it in GitHub Desktop.
Дз по сессиям и кукам

Задачи по сессиям

Примеры решения задач

Задача 1

Сделайте две страницы: index.php и hello.php. При заходе на index.php спросите с помощью формы имя пользователя, запишите его в сессию. При заходе на hello.php поприветствуйте пользователя фразой "Привет, %Имя%!".

Решение:

Страница index.php:

<form action="" method="GET">
	<input type="text" name="username">
	<input type="submit">
</form>

<?php
	//Если форма была отправлена и имя не пустое:
	if (!empty($_REQUEST['username'])) {
		session_start(); //стартуем сессию
		$_SESSION['username'] = $_REQUEST['username']; //пишем в сессию
	}
?>

Страница hello.php:

<?php
	session_start(); //стартуем сессию

	//Если есть данные в сессии об имени пользователя:
	if (!empty($_SESSION['username'])) {
		echo $_SESSION['username']; //выведем имя на экран
	}
?>

Задача 2

Спросите у пользователя телефон с помощью формы. Затем сделайте так, чтобы в другой форме (поля: имя, фамилия, телефон) при ее открытии поле телефон было автоматически заполнено.

Спрашиваем телефон:

<form action="" method="GET">
	<input type="text" name="phone">
	<input type="submit">
</form>

<?php
	//Если форма была отправлена и телефон не пустой:
	if (!empty($_REQUEST['phone'])) {
		session_start(); //стартуем сессию
		$_SESSION['phone'] = $_REQUEST['phone']; //пишем телефон в сессию
	}
?>

Другая форма:

<?php
	session_start(); //стартуем сессию

	//Если телефон есть в сессии - запишем его в переменную $phone:
	if(!empty($_SESSION['phone']))
		$phone = $_SESSION['phone'];
	else
		$phone = '';
?>

<form action="" method="GET">
	<input type="text" name="name">
	<input type="text" name="surname">

	<!-- Заполним атрибут value переменной $phone: -->
	<input type="text" name="phone" value="<?php echo $phone ?>">

	<input type="submit">
</form>

Работа с сессиями

0 - подготовка

Напишите оболочку-класс над session. Оболочка должна представлять собой набор функций: 
  1. конструктор в котором будет session_start(), 
  2. сохранение значения в сессию, 
  3. удаление значения из сессии, 
  4. редактирование значения сессии, 
  5. удаление самой сессии.
Для дальнейших задач просто подключайте его и работайте через него.

1

Сделайте две страницы: index.php и test.php. При заходе на index.php спросите с помощью формы страну пользователя, запишите ее в сессию. При заходе на test.php выведите страну пользователя.

2

Запишите в сессию время захода пользователя на сайт. При обновлении страницы выводите сколько секунд назад пользователь зашел на сайт.

3

Спросите у пользователя email с помощью формы. Затем сделайте так, чтобы в другой форме (поля: имя, фамилия, пароль, email) при ее открытии поле email было автоматически заполнено.

4

 Сделайте счетчик обновления страницы пользователем. Данные храните в сессии. Скрипт должен выводить на экран количество обновлений. При первом заходе на страницу он должен вывести сообщение о том, что вы еще не обновляли страницу.

5

 Сделайте две страницы: index.php и form.php. При заходе на index.php спросите с помощью формы город и возраст пользователя. На form.php сделайте форму с полями 'Имя', 'Возраст', 'Город'. При заходе на form.php сделайте так, чтобы поля 'Возраст' и 'Город' уже были заполнены.

6

 Добавьте в предыдущую задачу страницу logout.php. При заходе на нее разрушайте сессию пользователя.

* Задание повышенной сложности

Реализуйте тест по принципу 'одна страница сайта - одна задача'. Запомните результаты ответов пользователя в сессию.

Задачи на cookie (куки) в PHP

Примеры решения задач

Задача 1

Задача. Сделайте две страницы: index.php и hello.php. При заходе на index.php спросите с помощью формы имя пользователя, запишите его в куки. При заходе на hello.php поприветствуйте пользователя фразой "Привет, %Имя%!".

Решение:

Страница index.php:

<form action="" method="GET">
	<input type="text" name="username">
	<input type="submit">
</form>

<?php
	//Если форма была отправлена и имя не пустое:
	if (!empty($_REQUEST['username'])) {
		//Пишем имя в куки:
		setcookie('username', $_REQUEST['username'], time()+3600, '/');
	}
?>

Страница hello.php:

<?php
	//Если есть данные в куки об имени пользователя:
	if (!empty($_COOKIE['username'])) {
		echo $_COOKIE['username']; //выведем имя на экран
	}
?>

Задача 2

Задача. Спросите у пользователя телефон с помощью формы. Затем сделайте так, чтобы в другой форме (поля: имя, фамилия, телефон) при ее открытии поле телефон было автоматически заполнено.

Спрашиваем телефон:

<form action="" method="GET">
	<input type="text" name="phone">
	<input type="submit">
</form>

<?php
	//Если форма была отправлена и телефон не пустой:
	if (!empty($_REQUEST['phone'])) {
		//Пишем телефон в куки:
		setcookie('phone', $_REQUEST['phone'], time()+3600, '/');
	}
?>

Другая форма:

<?php
	//Если телефон есть в куки - запишем его в переменную $phone:
	if(!empty($_COOKIE['phone']))
		$phone = $_COOKIE['phone'];
	else
		$phone = '';
?>

<form action="" method="GET">
	<input type="text" name="name">
	<input type="text" name="surname">

	<!-- Заполним атрибут value переменной $phone: -->
	<input type="text" name="phone" value="<?php echo $phone ?>">

	<input type="submit">
</form>

Тренировка - скидывать не нужно

1. Сделайте две страницы: index.php и test.php. При заходе на index.php спросите с помощью формы страну пользователя, запишите ее в куки с именем country. При заходе на test.php выведите страну пользователя.
2. Удалите куку с именем country.
3. Установите куку с именем age. Запишите туда случайное число от 10 до 70 (с помощью mt_rand). Сделайте так, чтобы эта кука установилась на 1 час, на 3 часа, на 1 день, на год, на 10 лет, до конца текущего дня, до конца текущего года.

Задачи

0 - подготовка

Напишите оболочку-класс над cookie. Оболочка должна представлять собой набор функций:
  1. сохранение куки, 
  2. удаление куки, 
  3. редактирование куки. 
Для дальнейших задач просто подключайте его и работайте через него.

1

Сделайте счетчик посещения сайта посетителем. Каждый раз, заходя на сайт, он должен видеть надпись: 'Вы посетили наш сайт % раз!'.

2

Покажите пользователю баннер с кнопкой 'Не показывать больше!'. Если он нажмет на эту кнопку - не показывайте ему баннер в течении месяца.

3

Запомните дату последнего посещения сайта пользователем. При заходе на сайт напишите ему, сколько дней он не был на вашем сайте.

4

Спросите дату рождения пользователя. При следующем заходе на сайт напишите сколько дней осталось до его дня рождения. Если сегодня день рождения пользователя - поздравьте его!

5

Реализуйте выбор цвета шапки сайта пользователем. Сделайте несколько цветов для шапки. Пользователь может выбрать один из цветов с помощью выпадающего списка. Этот выбор будет сохранен в куки и пользователь, заходя на сайт, всегда будет видеть один и тот же цвет шапки. Можете заменить цвет на полноценный дизайн.

6 * Задание повышенной сложности

Сделайте на сайте 5 картинок с товарами. Реализуйте корзину. Под каждой картинкой должна быть ссылка 'Положить в корзину'. По нажатию на эту ссылку этот товар должен занестись в корзину (сессия), также должна увеличиться общая сумма, которую должен заплатить пользователь (сумма также должна быть указана под картинками с товарами).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment