Делаем сессию на PHP - с листингом
Итак, нам нужна сессия на PHP. Самый современный способ работы с ней - использование "суперглобального" массива $_SESSION, который не надо объявлять и данные которого недоступны методами GET или POST.
Ниже содержится листинг некоего файла index.php, содержащего форму для входа в сессию или же показывающего, что мы уже вошли.
<? require_once ("check.php"); session_start (); ?> <html> <head> <META HTTP-EQUIV="Pragma" CONTENT="no-cache"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251"> <title>Сессии: демо</title> </head> <body bgcolor="#E5E5E5" text="#000000" link="#006699" vlink="#5493B4"> <? $login1 = check_user(); if (!empty($login1)) { print 'Вы вошли как '.$login1.'</span>'; print '<br><a href="index.php" target=_blank>Новое окно</a>'; print '<br><a href="logout.php">Выход</a>'; } else { ?> <form method="post" action="login.php"> <table width=100% align=center border=0> <tr><td><span class=postbody>Логин:</span></td> <td><input type=text size=8 maxlength=16 name=login></td></tr> <tr><td><span class=postbody>Пароль:</span></td> <td><input type=password size=8 maxlength=16 name=password></td></tr> <tr><td colspan=2 align=center><input type=submit value="OK"></td></tr> </table></form> <? } ?>
После нажатия кнопки ОК вызывается файл login.php, отвечающий за создание сессии:
<? function login ($login1, $password1) { $login = 'test'; //Здесь нужно вместо этих 2 действий найти в базе запись $password=md5('123');//с логином, равным $login1 if ("$login1" == "$login" and md5("$password1") == "$password") { return true; } return false; } $login=$password=''; if (isset ($_POST['login'])) $login=$_POST['login']; if (isset ($_POST['password'])) $password=$_POST['password']; if (login ($login,$password)) { session_start(); $_SESSION['test_inside']=1; $_SESSION['current_user']=$login; } header("Location: ".$_SERVER['HTTP_REFERER']); ?>
По ссылке "Выход" мы можем закрыть сессию, вызвав файл logout.php:
<? require_once ("check.php"); session_start (); $current_user=check_user(); if (!empty($current_user)) { $_SESSION = array(); session_destroy (); } header('Location: '.$_SERVER['HTTP_REFERER']); ?>
Включаемый файл check.php служит для проверки того, доступна ли сессия.
<? function check_user () { if (!isset($_SESSION['test_inside'])) return ''; else return $_SESSION['current_user']; } ?>
Открытие новых окон браузера сохранит сессию - она будет разрушена автоматически только при закрытии последнего окна.
Теперь любой модуль проекта может содержать код, выполняемый в зависимости от того, находимся ли мы в сессии.
<? require_once ("check.php"); session_start (); //... $login1 = check_user(); if (!empty($login1)) { //Код, доступный только для зарегистрированного пользователя } ?>
Любопытный подход "сессию своими руками" в блоге о PHP на omsk777.ru
13.01.2009, 16:11 [15638 просмотров]