Функции для работы cookies: setcookie(); time(); mktime(). 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функции для работы cookies: setcookie(); time(); mktime().



Сессии и cookies

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

Использование сессий и cookies очень удобно и оправдано в таких приложениях как Интернет-магазины, форумы, доски объявлений, когда, во-первых, необходимо сохранять информацию о пользователях на протяжении нескольких станиц, а, во-вторых, своевременно предоставлять пользователю новую информацию.

Протокол HTTP является протоколом "без сохранения состояния". Это означает, что данный протокол не имеет встроенного способа сохранения состояния между двумя транзакциями. Т. е., когда пользователь открывает сначала одну страницу сайта, а затем переходит на другую страницу этого же сайта, то основываясь только на средствах, предоставляемых протоколом HTTP невозможно установить, что оба запроса относятся к одному пользователю. Т. о. необходим метод, при помощи которого можно было бы отслеживать информацию о пользователе в течение одного сеанса связи с Web-сайтом.

Одним из таких методов является использование сookies. Это удобно как для программистов, так и для пользователей. Пользователи выигрывают за счет того, что им не приходится каждый раз заново вводить информацию о себе, а программистам сookies помогают легко и надежно сохранять информацию о пользователях.

Другим методом отслеживания информации о пользователе в течение одного сеанса связи с Web-сайтом является управление сеансами при помощи предназначенных для этого функций.

 

Cookies

Функции для работы cookies: setcookie(); time(); mktime().

Определение Cookies - это текстовые строки, хранящиеся на стороне клиента, и содержащие пары "имя-значение", с которыми связан URL, по которому броузер определяет нужно ли посылать cookies на сервер.

Cookies хранятся в системном каталоге Cookies в файлах формата имя_пользователя@хост.txt.

 

Установка cookies

Установка cookies производится с помощью функции setcookie():

Setcookie()

Синтаксис:

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure ]]]]] )

Эта функция имеет следующие аргументы:

· name - имя устанавливаемого cookie;

· value - значение, хранящееся в cookie с именем $name;

· expire - время в секундах с 01.01.1970 г., по истечение которого текущий cookie становится недействительным (удаляется с машины клиента);

· path – путь на сервере, по которому доступен cookie;

· domain - домен, из которого доступен cookie;

· secure - директива, определяющая, доступен ли cookie по защищенному протоколу HTPPS. По умолчанию эта директива имеет значение 0, что означает возможность доступа к cookie по обычному незащищенному запросу HTTP.

Setcookie() возвращает true в случае успешного создания файла или false.

После установления cookie его значение становится доступным на всех страницах Web-приложения через суперглобальный массив $_COOKIE[имя cookie].

<? $counter ++; setcookie ( "counter", $counter ); echo( "Вы посетили эту страницу $counter раз" ); ?>

 

<? $_COOKIE ['counter']++; setcookie ( "counter", $counter ); echo 'Вы посетили эту страницу '. $_COOKIE ['counter'].' раз' ; ?>

 

Cookie надо обязательно устанавливать перед отправкой в броузер каких-либо заголовков, поскольку сами cookies устанавливаются в виде заголовков. Поэтому если установить cookies после какого-либо текста, отправляемого в браузер, то возникнет ошибочная ситуация.

Ошибочный пример:

Если здесь поместить текст, то возникнет ошибка, так как будет послан заголовок Content-type: text/html. <? $_COOKIE ['counter']++; setcookie ( "counter", $counter ); echo 'Вы посетили эту страницу '. $_COOKIE ['counter'].' раз' ; ?>

 

Time

Синтаксис:

time ();

Усовершенствованным вариантом функции time является функция mktime:

Mktime

Синтаксис:

int mktime ( [ int hour [, int minute [, int second [, int month [, int day [, int year [, int is_dst ]]]]]]] )

Первые шесть параметров задают соответственно часы, минуты, секунды, месяцы, дни и год.

Аргумент is_dst этой функции определяет, попадает ли эта дата в период летнего времени и может принимать следующие значения:

· -1 (По умолчанию. Означает, что свойство не задано);

· 0 (Временной интервал не приходится на период летнего времени);

· 1 (Временной интервал приходится на период летнего времени).

Примеры установки сроки годности cookies:

<? /* этот cookie действителен в течение 10 мин после создания */ setcookie ( "name", $value, time () + 600 ); /* действие этого cookie прекращается в полночь 25 января 2010 года */ setcookie ( "name", $value, mktime ( 0,0,0,01,25,2010 )); /* действие этого cookie прекращается в 18.00 25 января 2010 года */ setcookie ( "name", $value, mktime ( 18,0,0,01,25,2010 )); ?>

 

Удаление cookies.

Для этого можно установить им нулевое время жизни, вызвав функцию setcookie и передав ей имя того cookie, который подлежит удалению:

 

setcookie ( "name" );

 

Другие установленные cookie при этом не удаляются.

Замечание: Для удаления cookie с ограничениями по каталогу необходимо выставлять точно такие же ограничения при удалении cookie, в противном случае cookie не будет уничтожен:

setcookie ( "name", " value ", time() + 600, "/”, “www.mgup.ru" ); // Создание setcookie ( "name", " value ", NULL, "/”, “www.mgup.ru" ); // Удаление

 

Проверка поддержки cookie.

Поскольку некоторые пользователи отключают cookie в настройках своих браузеров, для корректной работы, в приложение, использующее cookies, необходимо помещать код, проверяющий включены ли cookies у посетителя, и, если нет, то сообщающий ему о необходимости включить cookie:

 

<? (1) if (!$GET[cookie] ) { /* устанавливаем cookie с именем "test" и значением 1 */ (2) setcookie ( "test","1" ); /* посылаем заголовок переадресации на страницу, с которой будет предпринята попытка установить cookie */ (3) header ( "Location: {$_SERVER [“PHP_SELF”]}?cookie=1 " ); } else { (4) if (! isset ($_COOKIE[‘test’]) ) { echo( "Для корректной работы приложения необходимо включить cookies" ); } else { /* cookie включены, переходим на нужную страницу */ header ( "Location: http://localhost/test1.php" ); } } ?>

Здесь При первой проверке существования переменной cookie – стр.1 получаем результат true. Создаем cookie – стр.2 и заставляем браузер перезагрузить страницу – стр3. После перезагрузки при второй проверке существования переменной cookie – стр.1 получаем результат false. Если cookie будет создан, то при перезагрузке браузер вернет его серверу. Проверив наличие этого cookie – стр.4 можно проверить работоспособность cookie.

 

 


Сессии (сеансы) в PHP

Функции для работы с сессиями: session_start(); unset(); session_id(); session_destroy(); session_register() session_unregister()

 

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

 

При работе с сессиями различают следующие этапы:

· открытие сессии

· регистрация переменных сессии и их использование

· закрытие сессии

 

Открытие сессии

Самый простой способ открытия сессии заключается в использовании функции session_start, которая вызывается в начале PHP-сценария:

session_start

Синтаксис:

bool session_start (void);

 

Эта функция проверяет, существует ли идентификатор сессии, и, если нет, то создает его. Если идентификатор текущей сессии уже существует, то загружаются зарегистрированные переменные сессии.

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

Закрытие сессии

После завершения работы с сессией сначала нужно разрегистрировать все переменные сессии, а затем вызвать функцию session_destroy:

 

Для разрегистрации используют функцию:

Unset

Синтаксис:

unset ( $_SESSION ["username"] );

 

Для закрытия сессии:

session_destroy

Синтаксис:

bool session_destroy (void);

Идентификатор сессии

При открытии сеанса создается его идентификатор. Узнать значение идентификатора можно с помощью функции:

string session_id ([string id])

При отсутствии параметра функция возвращает идентификатор сессии. При наличии параметра функция задает идентификатор сессии. Задавать свой идентификатор можно только до открытия сессии.

Примеры простых сессий

Пример1

<?php session_start (); //Если $_SESSION[“var”] не существует или пуст, то этому элементу присваивается значение 1. if (! $_SESSION ['var']) { $_SESSION ['var']=1;}//Иначе производится инкремент значения этого элемента массиваelse { $_SESSION ['var']++;}//вывод на экран echo $_SESSION ['var']."<br>"; ?>

 

При каждом обращении к странице на экран выводится счетчик обращений к странице, которые были выполнены в течение данного сеанса. При каждом щелчке на кнопке браузера ОБНОВИТЬ цифра посещений увеличивается на единицу. Но после закрытия браузера и открытия снова, счетчик начнет счет с 1, т.к. предыдущая сессия была закрыта и стартовала новая.

Пример2

<?php session_start (); if (! $_SESSION ['var']) { $_SESSION ['var']=1;}else { if ($_SESSION ['var'] < 7) { $_SESSION ['var']++; } else { session_destroy (); }} echo $_SESSION ['var']."<br>"; ?>

Здесь выполняются те же действия, что и в предыдущем примере, за исключением того, что счетчик не превысит 7 и начнет счет с 1. Так как функция session_destroy () останавливает передачу данных сессии в скрипт, но не уничтожает сессионных переменных для текущего скрипта, то цифра 7 будет выведена дважды.

Для моментального уничтожения сессионной переменной служит функция unset ().

unset ($_SESSION['var']);

 

Пример3

Рассмотрим пример простой сессии, работающей с тремя страницами. При посещении пользователем первой страницы открывается сессия и регистрируется переменная $username. Соответствующий код реализации приведен в листинге:

 

<? session_start (); $_SESSION ['username'] = "maksim"; echo 'Привет, ' .$_SESSION ['username']."<br>"; ?> <a href="page2.php">На следующую страницу </a>

Результат работы этого сценария:

 

 

После этого, пользователь maksim нажимает на ссылку и попадает на страницу page2.php, код которой приведен в листинге:

<? session_start (); echo $_SESSION ['username'].', ты пришел на другую страницу этого сайта!'; echo( "<br>" );?> <a href="page3.php">На следующую страницу </a>

Результат работы этого скрипта:

 

 

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

 

<? session_start (); unset ( $_SESSION ['username'] ); // разрегистрировали переменную echo 'Привет, ' .$_SESSION ['username']; /* теперь имя пользователя уже не выводится */ session_destroy (); // разрушаем сессию?>

Как видно из рисунка, после разрегистрации сеансовой переменной значение массива $_SESSION ['username'] уже недоступно:

 

 


Аутентификация

 

Защита одной сраницы:

<html>

<head>

<title>Аутентификация пользователей</title>

</head>

<body>

<?php

if (isset($_POST["user"]) && isset($_POST["pass"]) &&

strtolower($_POST["user"]) == "shelley" && $_POST["pass"] == "deadline") {

?>

Добро пожаловать! Здесь вы найдете всю правду о JFK...

<?php

} else {

?>

Пожалуйста, зарегистрируйтесь!

<form method="post">

Имя пользователя: <input type="text" name="user" /><br />

Пароль: <input type="password" name="pass" /><br />

<input type="submit" name="Вход" />

</form>

<?php

}

?>

</body>

</html>

 

Для защиты большего количества страниц от несанкционированного доступа единственным вариантом, работающим в любых условиях является использование PHP сеансов. Информация о результатах прохождения процедуры аутентификации пользователем хранится в переменных сеанса. Благодаря возможности управления PHP сеансами, эта информация будет доступна на всех страницах Web-приложений.

 

Пример включает три сценария. Первый, authmain.php, обеспечивает форму для входной регистрации и аутентификации пользователей Web-сайта. Второй, members_only.php, представляет информацию только для тех пользователей, которые успешно прошли входную регистрацию. Третий, logout.php, реализует выход пользователей из системы.

Рис. 1. - это исходная страница, отображаемая сценарием authmain.php.

Данная страница предоставляет пользователю возможность войти в систему. В случае, если он предпримет попытку получить доступ к секции Members, не пройдя входную регистрацию, будет выдано сообщение, показанное на рис. 2, генерируемое сценарием members_only.php.

Рис. 1 Рис. 2

Если же пользователь сначала прошел входную регистрацию, а после этого предпринял попытку войти на страницу Members, он увидит то, что представлено на рис. 3 (результат сценария members_only.php).

Рис. 3

Большая часть кода сосредоточена в сценарии authmain.php

Работа этого сценария сосредоточена вокруг переменной сеанса $valid_user. Основная идея здесь заключается в следующем: если кто-либо успешно прошел процедуру входной регистрации, мы регистрируем переменную сеанса с именем $valid_user, которая содержит идентификатор пользователя.

 

Черный – выполняется всегда.

Красный – выполняется при загрузке страницы

Коричневый – выполняется всегда при нажатии кнопки (при регистрации)

Синий – выполняется при нажатии кнопки и отсутствии в базе данных пользователя

Зеленый - выполняется при нажатии кнопки и нахождении в базе данных пользователя

 

Authmain.php

<?

session_start();

 

if ($_POST[“userid”] && $_POST[“password”])

{

// Если пользователь попытался зарегистрироваться (нажал кнопку на форме)

$userid = $_POST[“userid”];

$password = $_POST[“password”];

$db_conn = mysql_connect("localhost", "webauth", "webauth");

mysql_select_db("auth", $db_conn);

$query = "select * from auth.where name='$userid'.and pass=MD5('$password')";

$result = mysql_query($query, $db_conn);

if (mysql_num_rows($result) >0)

{

// Если пользователь найден в базе данных, регистрируем его идентификатор

$_SESSION[“valid_user”] = $userid;

}

}

?>

<html>

<body>

<h1>Home page</h1>

<?

 

if (isset($_SESSION["valid_user"]))

{

echo "You are logged in as: $valid_user <br>"; //Вы зарегистрированы как:

echo "<a href=\"logout.php\">Log out</a><br>";

}

else

{

if (isset($userid))

{

// Была предпринята неудачная попытка зарегистрироваться

echo "Could not log you in"; //Регистрация невозможна

}

else

{

// Пользователь либо не пытался войти, либо уже вышел

echo "You are not logged in.<br>"; //Вы не зарегистрированы

}

 

// Форма для регистрации

echo "<form method=post action="authmain.php">";

echo "<table>";

echo "<tr><td>Userid:</td>";

echo "<td><input type=text name=userid></td></tr>";

echo "<tr><td>Password:</td>";

echo "<td><input type=password name=password></td></tr>";

echo "<tr><td colspan=2 align=center>";

echo "<input type=submit value=\"Log in\"></td></tr>";

echo "</table></form>";

}

?>

<br>

<a href="members_only.php">Members section</a>

</body>

</html>

 

members_only.php

<?

session_start();

 

echo "<h1>Members only</h1>"; //Только для зарегистрированных пользователей

 

// Проверить переменные сеанса

 

if ($_SESSION["valid_user"])

{

echo "<p>You are logged in as: $valid_user.</p>"; //Вы зарегистрированы как:

echo "<p>Members only content goes here</p>"; Текст только для зарегистрированных

}

else

{

echo "<p>You are not logged in.</p>"; //Вы не являетесь зарегистрированным пользоват.

echo "<p>Only logged in members may see this page.</p>"; //Эта стр. Для Вас //не доступна

}

 

echo "<a href="authmain.php">Back to main page</a>"; //Назад на главную стр.

?>

 

Logout.php

<?

session_start();

 

$old_user = $_SESSION[“valid_user”]; //Сохранить для проверки, //регистрировался ли пользователь

unset ($_SESSION["valid_user"]);

session_destroy();

?>

<html>

<body>

<h1>Log out</h1> //Выход

<?

if (!empty($old_user)) //Аналог isset

{

echo "Logged out.<br>"; //Успешный выход

}

else

{

//Если пользователь не был зарегистрирован, но каким-то образом попал на эту страницу

echo "Разрегистрация не нужна, т.к. Вы не были зарегистрированы.<br>";

}

?>

<a href="authmain.php">Back to main page</a> //Назад на главную страницу

</body>

</html>

 

Сессии и cookies

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

Использование сессий и cookies очень удобно и оправдано в таких приложениях как Интернет-магазины, форумы, доски объявлений, когда, во-первых, необходимо сохранять информацию о пользователях на протяжении нескольких станиц, а, во-вторых, своевременно предоставлять пользователю новую информацию.

Протокол HTTP является протоколом "без сохранения состояния". Это означает, что данный протокол не имеет встроенного способа сохранения состояния между двумя транзакциями. Т. е., когда пользователь открывает сначала одну страницу сайта, а затем переходит на другую страницу этого же сайта, то основываясь только на средствах, предоставляемых протоколом HTTP невозможно установить, что оба запроса относятся к одному пользователю. Т. о. необходим метод, при помощи которого можно было бы отслеживать информацию о пользователе в течение одного сеанса связи с Web-сайтом.

Одним из таких методов является использование сookies. Это удобно как для программистов, так и для пользователей. Пользователи выигрывают за счет того, что им не приходится каждый раз заново вводить информацию о себе, а программистам сookies помогают легко и надежно сохранять информацию о пользователях.

Другим методом отслеживания информации о пользователе в течение одного сеанса связи с Web-сайтом является управление сеансами при помощи предназначенных для этого функций.

 

Cookies

Функции для работы cookies: setcookie(); time(); mktime().

Определение Cookies - это текстовые строки, хранящиеся на стороне клиента, и содержащие пары "имя-значение", с которыми связан URL, по которому броузер определяет нужно ли посылать cookies на сервер.

Cookies хранятся в системном каталоге Cookies в файлах формата имя_пользователя@хост.txt.

 

Установка cookies

Установка cookies производится с помощью функции setcookie():

Setcookie()

Синтаксис:

bool setcookie ( string name [, string value [, int expire [, string path [, string domain [, int secure ]]]]] )

Эта функция имеет следующие аргументы:

· name - имя устанавливаемого cookie;

· value - значение, хранящееся в cookie с именем $name;

· expire - время в секундах с 01.01.1970 г., по истечение которого текущий cookie становится недействительным (удаляется с машины клиента);

· path – путь на сервере, по которому доступен cookie;

· domain - домен, из которого доступен cookie;

· secure - директива, определяющая, доступен ли cookie по защищенному протоколу HTPPS. По умолчанию эта директива имеет значение 0, что означает возможность доступа к cookie по обычному незащищенному запросу HTTP.

Setcookie() возвращает true в случае успешного создания файла или false.

После установления cookie его значение становится доступным на всех страницах Web-приложения через суперглобальный массив $_COOKIE[имя cookie].

<? $counter ++; setcookie ( "counter", $counter ); echo( "Вы посетили эту страницу $counter раз" ); ?>

 

<? $_COOKIE ['counter']++; setcookie ( "counter", $counter ); echo 'Вы посетили эту страницу '. $_COOKIE ['counter'].' раз' ; ?>

 

Cookie надо обязательно устанавливать перед отправкой в броузер каких-либо заголовков, поскольку сами cookies устанавливаются в виде заголовков. Поэтому если установить cookies после какого-либо текста, отправляемого в браузер, то возникнет ошибочная ситуация.

Ошибочный пример:

Если здесь поместить текст, то возникнет ошибка, так как будет послан заголовок Content-type: text/html. <? $_COOKIE ['counter']++; setcookie ( "counter", $counter ); echo 'Вы посетили эту страницу '. $_COOKIE ['counter'].' раз' ; ?>

 



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 332; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.119.143.4 (0.175 с.)