Авторизация на сайте. Вход-выход

striker455

Новичок
Авторизация на сайте. Вход-выход

Добрый день всем!
У меня сложилась такая ситуация:
есть страница входа(enter.html):
<html>
<head>
<title>Enter page</title>
</head>
<body>
<form method="post" action="test.php?login">
<input type="text" name="user" /><br />
<input type="password" name="pass" /><br />
<input type="submit" name="submit" value="&#194;&#245;&#238;&#228;" />
</form>
</body>
</html>

вот файл test.php:

<?
if (isset($_GET['logout'])) {
session_start();
unset($_SESSION['username']);
session_destroy();
echo "<a href='http://127.0.0.1/enter.html'>Back to enter page</a>";
}
if (isset($_GET['login'])) {

if (isset($_POST["submit"])) {
if ($_POST["user"] == "someuser" && $_POST["pass"] == "somepassword") {
session_start();
$_SESSION["username"] = $_POST["user"];
}
}
?>
<html>
<head>
<title>Identification page</title>
</head>
<body>
<?
if (isset($_SESSION["username"])) {
echo $_SESSION['username'].'Welcome to test page!';

echo "<a href='http://127.0.0.1/test1.php'>Next</a><p>";
echo "<a href='http://127.0.0.1/test.php?logout'>Exit and back to login</a>";
echo "<BR>";


}else {
echo "Incorrect username or password!";
echo "<a href='http://127.0.0.1/enter.html'>Back to login page</a>";
}
}
?>
</body>
</html>

test1.php:

<?php
session_start();
echo $_SESSION['username'].'You was successfully authorized!';
?>
Хочется сделать так чтобы пользователь вошел, что-то сделал и при нажатии на "Выход" вышел и переместился на страницу входа. Что-то наподобии мини-форума.
Все вроде работает, при выходе после уничтожения сессии переходит настраницу входа. Но если перейти обратно и обновить страницу, он ее загружает заново. Как сделать чтобы он ее не грузил. Ведь я сессии уничтожил. Но переменные все равно в памяти.
Все отлично работает в IE, но в Opera и Mozila все равно грузят их из памяти как будто сессия не была уничтожена. Помогите плиз!!!
 

chisto_tolyan

Враг народа
header("Location: http://mysite.com");
exit;
а вообще-то в поиск, эта тема уже 100 раз поднималась
 

striker455

Новичок
Да еще вот что:
Использую Apache+php. Данные мени пользователя и пароля буду хранить в базе данных на mssql server 2000. Сейчас просто тестирую систему входа-выхода. Хочется что бы все работало наподобие почтового сервака. При выходе, после обновления страницы он не выводил ее из памяти а говорил мол что вы вышли и все тут, и предлагал войти снова. Как сделать незнаяю. Испробовал все способы отмены кеширования страниц. Может все дело в сессиях. Подскажите плиз.

-~{}~ 12.02.06 13:50:

Тема может и обсуждалась. Может я неправильно выажаюсь. Мне надо сделать на странице проверку что пользователь уже вышел. Что-то наподобие того что используется на почтовых сайтах.

-~{}~ 12.02.06 14:06:

Все вроде бы понял, но как сделать вызов редиректа header("location:.....php") при нажатии на ссылку или кнопку или ссылку этом файле в моей ситуации "test.php"

-~{}~ 12.02.06 14:12:

Ну кто-нибудь подскажет??????

-~{}~ 12.02.06 14:36:

Никакой header...exit не помогает. При нажатии back в opera или в mozila грузится прежняя страница, как будто никакого выхода и не было. А в Internet Explorer страница вообще становится устаревшей и не обновяется вообще.

-~{}~ 12.02.06 17:01:

Да уж! зря я залез на этот форум. Тут или все очень умные и гордые или просто ничего не знают!!!
 

MadGreen

meninweb
при авторизации
$_SESSION['in'] = 'in';

при выходе
$_SESSION['in'] = 'quit';

на рабочей странице
if (isset ($_SESSION['in']) and $_SESSION['in'] == 'in')
показываешь свои данные...

примитивно, но первое что пришло на ум...
 

SlavikSG

Новичок
Автор оригинала: MadGreen
при авторизации
$_SESSION['in'] = 'in';

при выходе
$_SESSION['in'] = 'quit';

на рабочей странице
if (isset ($_SESSION['in']) and $_SESSION['in'] == 'in')
показываешь свои данные...

примитивно, но первое что пришло на ум...
Как продолжение...
В принципе, как я понял, у тебя используется три состояния переменной.
1. Переменной вообще нет. (сделан первый запуск страницы)
2. Переменная есть и равна 'in'; (чел авторизован)
3. Переменная есть и равна 'quit'; (чел нажал на кнопку Выход)

Прав ли я буду, если скажу, что по существу за Авторизацию на сайте, в итоге, может отвечать лишь одна обычная глобальная переменная находящаяся, к примеру, в массиве $_SESSION, который мы можем юзать, когда сессия стартовала. Назовем эту переменную $_SESSION['Proverka'] и инициализируем в ноль при первом запуске страницы:
$_SESSION['Proverka']=0;

Дальше запускаем страничку и следим за этой переменной:

Если клиентский кук с уникальным ID пришел, и наша переменная равна нулю то...
If (Isset($_COOKIE['UserID']) and $_SESSION['Proverka']==0)
Выполняем поиск в базе и автоматом авторизуем пользователя. Если
пользователь найден, то $_SESSION['Proverka'] делаем равной 1.
$_SESSION['Proverka']=1;
И начиная с этого момента пользователь у нас авторизован. Поля ввода имени и пароля не выводятся, но зато появляется кнопочка "Выход".

Если кук не пришел и наша переменная равна нулю то...
If (!Isset($_COOKIE['UserID']) and $_SESSION['Proverka']==0)
Выводим поля для ручной авторизации пользователя. Если чел авторизовался нормально, то переменная $ _SESSION['Proverka'] опять становится равной 1
$_SESSION['Proverka']=1;
Человек авторизован и после обновления страницы поля ввода имени и пароля пропадают и появляется кнопочка "Выход".

И вот теперь самое интересно. Если нажимаем, кнопочку "Выход", то переменную $ _SESSION['Proverka'] делаем равной 2
$_SESSION['Proverka']=2;
И с этого момента у нас не срабатывает ни первое, ни второе условие. Но зато срабатывает показ кнопок для повторной авторизации, а кнопочка "Выход" пропадает.

Если все это сложно, то тогда спрошу коротко, можно ли оперируя лишь одной глобальной переменной следить за тем, авторизован пользователь или нет? То есть, можно ли вообще не удалять сессию как таковую, а просто следить за значением этой своей глобальной переменной, у которой будет лишь три состояния.
0 - это когда первый раз запустили браузер
1 - это когда чел авторизовался
2 - это когда была нажата кнопка Выход

Все это я шамил на одной странице. Очень хотелось обойтись без запуска дополнительных дочерних окон. Вроде, работает, но не знаю, можно ли так вообще делать. Я новичок в PHP. И эти "сеансово" исполняемые программы для меня очень непривычны.
 

SlavikSG

Новичок
Автор оригинала: Апокалипсис
SlavikSG
дату темы смотрел?
Прежде чем создавать тему, я лезу в поиск. Если тема уже существует, да к тому с очень схожей тематикой, зачем городить новую? И не важно, что тема обсуждалась в последний раз больше года назад. Я всегда смотрю на дату последнего поста. Тем более, что тема найдена через поиск. Мне даже самому интересно посмотреть на дату. И никакого нонсенса тут нет. Если участники темы были на нее подписаны, то они должны получить уведомления. Если не получат, то увидят другие участники форума. К примеру, ты. :)

Дык кто-нибудь скажет, все же:
1. Можно ли авторизацию на сайте доверить лишь одной глобальной переменной, проверяя лишь ее значение?
2. Можно ли, вообще не закрывать один раз начатую сессию. Насколько это критично и безопасно?
 
Сверху