Нужна ваша помощь.
Есть несколько страниц, форма авторизации и страница которая показывается после
авторизации. Плюс есть ПХП файл который удаляет сессии, чтобы при выходе со
страницы пользователь не смог вернуться обратно не заполнив поля логин и пароль.
Вот форма авторизации logins.php
<?
session_name('Admin');
session_start();
// Подключение к базе
include './conect/config.php';
// Этот файл с логином и паролем
include './conect/admins.php';
if (isset($_POST['username'])) {
//Здесь капча
$captcha=(int) $_POST["captcha4"];
$captcha=md5("Kjg6fgDsw2ssdd".$captcha);
$ver=$_SESSION["captcha4"];
//***********
$username=uc(trim($_POST['username']),25);
$password=uc(trim($_POST['password']),25);
$patern = "/^[A-Z,a-z,0-9,_]{3,25}+$/";
// массив для ошибок
$error = array();
if($captcha!=$ver) {
$error[] = 'Неверно введен код с картинки...';
}
if (empty($password)) {
$error[] = 'Введите пароль!';
}
if (!preg_match($patern, $username)) {
$error[] = 'Логин введен не правильно!';
}
if (!preg_match($patern, $password)) {
$error[] = 'Пароль введен не правильно!';
}
if ($password!=$PASSWORD or $username!=$USER) {
$error[] = 'Неверные данные!';
}
if (count($error)) {
// или записать в сессию, или вывести прям сдесь. Сделаю 2 вариант
echo '<link rel="stylesheet" type="text/css" href="./css/mesen.css?1324491378"/>
<div class="error message"><div class="mesag"><h3>Ошибка!</h3>
<p>'.implode('<br />',$error).'</p></div></div>
<div class="stet">Нажмите на кнопку чтобы попробовать войти еще раз.<br />
<a href="./logins.php">Войти еще раз</a></div>';
$_SESSION=array();
die();
}
$_SESSION["username"]=$USER;
$_SESSION["password"]=md5("12hf6".$PASSWORD);
?>
<script type="text/javascript">
location.replace("./index.php");
</script>
<noscript>
<meta http-equiv="refresh" content="0; url=./index.php">
</noscript>
<?
} else {
?>
<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Авторизация</title>
<meta name="robots" content="noindex,nofollow,noodp,noydir" />
<link rel="stylesheet" type="text/css" href="./css/log.css?1324491378" />
</head>
<body>
<br>
<br>
<div id="authform">
<div class="top">Авторизация</div>
<form action='logins.php' method='POST'>
<h4>Логин:</h4>
<input class="logs" type="text" maxlength="25" name="username" autocomplete="off" value="" />
<h4>Пароль:</h4>
<input class="logs" type="password" maxlength='25' name="password" autocomplete="off" value="" tabindex="2" />
<div class="bloc">
<img src="ca.php" /><h5>введите код с картинки:</h5>
<input class="logs2" type=text value='' size=10 maxlength=10 name="captcha4" /></div>
<input type="submit" value="Войти в аккаунт" class="submit" tabindex="4" />
</form></div>
</body>
</html>
<?
}
die();
?>
Вот часть страницы которая показывается авторизированому пользователю
<?php
session_name('Admin');
// стартуем сессию.
session_start();
// Этот файл удаляет сессию
include './obr/auth.php';
if(!isset($_GET['p'])){
$pag = 'vivod';
include 'php/indx.php';
}
else{
$pag = trim($_GET['p']);
}
switch($pag){
case 'vivod' :
$title = 'Панель заявок';
$opis = 'Здесь Вы можете просматривать новые заявки и удалять не нужные';
break;
case 'new' :
$title = 'Добавление новой заявки';
$opis = 'Здесь Вы можете добавить новую заявку сами';
break;
}
// Здесь событие по кнопке выйти по нажатию на которую
// записывается сессия в массив и перекидывает на форму авторизации
// и после массив с сессиями удаляется
$ex = (int) $_GET['ex'];
if ($ex > 0) {
$_SESSION=array();
header("Location: ./logins.php");
exit;
}
?>
<!DOCTYPE HTML>
<html lang="ru-RU">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title><?php echo $title; ?></title>
<meta name="robots" content="noindex,nofollow,noodp,noydir" />
<link rel="stylesheet" type="text/css" href="styles.css?1324491378" />
</head>
<body>
<div id="topen"><div class="topen-s">
<h2>Панель администратора.</h2>
<p><?php echo $opis; ?></p></div>
</div>
<div class="menu-admin">
<div class="menu-s">
<ul>
<li><a href="./index.php">Новые заявки</a></li>
<li><a href="./index.php?p=new">Добавить заявку</a></li>
<li><a href="./index.php?ex=1">Выйти</a></li>
</ul></div>
Вот сам файл обработчик, который удаляет сессии auth.php
<?
// Подключаем файл где логин и пароль
include "../conect/admins.php";
if(!(isset($_SESSION["username"]) && isset($_SESSION["password"])))
{
?>
<script type="text/javascript">
location.replace("./logins.php");
</script>
<noscript>
<meta http-equiv="refresh" content="0; url=./logins.php">
</noscript>
<?
// Удаляем массив с сессиями
$_SESSION=array();
session_destroy();
exit();
}
?>
В принципе все работает. Но вот как сделать чтобы сессия удалялась не только
по нажатию на кнопку ВЫЙТИ?
К примеру если пользователь не совершает каких-то действий в течении некоторого
времени и после истечения заданного времени сессия удалялась.
Как это сделать не понимаю?
Вот еще момент, если я в файл auth.php прописываю вот так
<?
// Подключаем файл где логин и пароль
include "../conect/admins.php";
$PSW=md5("12hf6".$PASSWORD);
if(!(isset($_SESSION["username"]) && isset($_SESSION["password"]) )
or $_SESSION["password"]!=$PSW or $_SESSION["username"]!=$USER
or !preg_match("/^[A-Z,a-z,0-9,_]{3,32}+$/",$_SESSION["username"]))
{
?>
<script type="text/javascript">
location.replace("./logins.php");
</script>
<noscript>
<meta http-equiv="refresh" content="0; url=./logins.php">
</noscript>
<?
// Удаляем массив с сессиями
$_SESSION=array();
session_destroy();
exit();
}
?>
То на скрытую страницу переходит, но если на ней секунд 5 не совершать никаких
действий, то сессия удаляется автоматом и при совершении какого нибудь действия,
нажатие на кнопку или обновление страницы, автоматом перекидывает на
форму авторизации.
Вот не знаю как задать время для жизни сессии.
Плюс еще проверил вот такое, авторизировался, потом поменял в файле логин и пароль,
попытался совершить действие на страничке и все нормально. А как же сделать так,
чтоб если поменялся пароль или логин админом, то другой пользователь при совершении
действий на страничке в момент изменения данных выкидывался со страницы и сессия удалялась?
Вроде объяснил нормально.
Буду очень благодарен вашей помощи! Спасибо!