[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с авторизацией и сесией
Astin
Доброго времени суток Форумчане!
Нужна ваша помощь.

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

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

Вот не знаю как задать время для жизни сессии.

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

Вроде объяснил нормально.

Буду очень благодарен вашей помощи! Спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.