Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Проблема с авторизацией и сесией, Проблема с авторизацией и сесией
Astin  
 ۩  [x] Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Здесь живет
******

Профиль
Группа: Форумчанин
Завсегдатай форума
Сообщений: 592
Пользователь №: 42519
На форуме: 9 месяцев, 20 дней
Карма: 7




Доброго времени суток Форумчане!
Нужна ваша помощь.

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

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

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

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

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

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

Это сообщение отредактировал Astin - 26.02.2016 - 16:04
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
inpost  
Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Помагите Здесь живу!!!
******

Профиль
Группа: Эксперт
Группа переписки
Сообщений: 22688
Пользователь №: 20039
На форуме: 6 лет, 11 месяцев, 25 дней
Карма: 599




Цитата
К примеру если пользователь не совершает каких-то действий в течении некоторого
времени и после истечения заданного времени сессия удалялась.


Так и будет. Или укажи точное время жизни сессии, хотя не вижу в этом яркой необходимости.
Первая ссылка в гугле по этому запросу:
user posted image


--------------------
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
PMПисьмо на e-mail пользователюICQ
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса