Регистрация переменных сессии 


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



ЗНАЕТЕ ЛИ ВЫ?

Регистрация переменных сессии



После инициализации сессии появляется возможность сохранять информацию в суперглобальном массиве $_SESSION или $HTTP_SESSION_VARS. То, что в них сохраняется называется сеансовыми переменными.

 

$_SESSION [ 'username' ] = "username"; // или $HTTP_SESSION_VARS [ 'username' ] = "username";

 

Для корректной работы приложения необходимо проверять, установлены ли переменные сессии. Такую проверку можно сделать, к примеру, так:

 

if ( isset ( $_SESSION ['username'] ))

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

После завершения работы с сессией сначала нужно разрегистрировать все переменные сессии, а затем вызвать функцию 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>

 



Поделиться:


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

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