БлогNot. Делаем сессию на PHP - с листингом

Делаем сессию на 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 [15642 просмотра]


теги: программирование php

К этой статье пока нет комментариев, Ваш будет первым