Показать сообщение отдельно
  #1 (permalink)  
Старый 30.06.2012, 18:42
Аспирант
Отправить личное сообщение для wcb-falcon Посмотреть профиль Найти все сообщения от wcb-falcon
 
Регистрация: 11.06.2008
Сообщений: 31

Авторизация Ajax + Php + Mysql (session)
Делаю для сайта на некоторых страницах авторизацию чтобы пользователи зарегестрированные в системе и имеющие определенную группу смоги увидеть доступный для них контент.
Все вроде хорошо и авторизация работает (и выход из нее тоже)
но вот возникла маленькая заминка дело в том что закрытый контент становится доступным только после того как пользователь перегрузит страницу на которой находится

так вот вопрос в том как после выполнения авторизации (или разлогирования) заставить страницу перегрузится.

вот скрипты которые я использую:
файл index где вставлена форма авторизации
<?
	if ( $_SESSION["entr"] == true ) echo '<div id="entry-div">
						Информация:<br />
						Вы вошли!<br /><br />
						<button name="exit" onclick="ajaxex();">Выйти</button>
					</div>';
	else echo '<div id="entry-div">
						<div id="message"></div>
						<input type="text" id="login" class="inp" /><br />
						<input type="password" id="pass" class="inp" /><br />
						<button name="entry" onclick="ajaxcl();">Войти</button>
					</div>';	
?>
<?
if ( $_SESSION["entr"] == true ) {
echo 'Информация для авторизированных пользователей';
}
?>


файл authscript.js
var xmlhttp;
// Создаём объект для передачи данных
if ( window.XMLHttpRequest ) {xmlhttp = new XMLHttpRequest();}
else {xmlhttp = new ActiveXObject ( "Microsoft.XMLHTTP" );}
// Функция для входа
function ajaxcl()
{
	document.getElementById('message').innerHTML = '';
	// Проверяем на заполненность полей, если что не так, то меняем стиль для текстового поля
	if ( document.getElementById('login').value == '' )	{document.getElementById('login').className = 'err';}
	else {document.getElementById('login').className = 'inp';}
	if ( document.getElementById('pass').value == '' ) {document.getElementById('pass').className = 'err';}
	else {document.getElementById('pass').className = 'inp';}
	// Если все поля заполнены
	if ( ( document.getElementById('login').value !== '' ) && ( document.getElementById('pass').value !== '' ) )
	{
		// обрабатываем ответ
		xmlhttp.onreadystatechange = function () {
				// если запрос к скрипту удачный
				if ( xmlhttp.readyState == 4 ) {
						// если ответ в виде слова - Error - то в блок message выводим сообщение о ошибке, иначе выводим то, что получили
						if ( xmlhttp.responseText == 'Error' ) {document.getElementById("message").innerHTML = 'Информация:<br />Данные введены не верно!';}
						else {document.getElementById("entry-div").innerHTML=xmlhttp.responseText;}
				}
		}
		// отправляем запрос
		var login = document.getElementById("login").value;
		var pass = document.getElementById("pass").value;
		// Отправляем логин с паролём в get запросе
		xmlhttp.open ( "GET", "authscript.php?l="+login+"&p="+pass+"&rn="+Math.random(), true );
		xmlhttp.send ();
	}
}
// Функция выхода из профиля
function ajaxex()
{
	// обрабатываем ответ
	xmlhttp.onreadystatechange = function () {
			// если запрос к скрипту удачный
			if ( xmlhttp.readyState == 4 ) {
					// Выводим форму входа
						document.getElementById("entry-div").innerHTML=xmlhttp.responseText;
			}
	}
	// Отправляем get запрос с ключевым словом exit
	xmlhttp.open ( "GET", "authscript.php?exit&rn="+Math.random(), true );
	xmlhttp.send ();
}


файл authscript.php
<?php
session_start();
require_once('.settings.php'); // файл с данными для подключения

	// Если мы получили данные для входа
	if ( isset ( $_GET["l"] ) and ( $_GET["l"] <> "" ) and isset ( $_GET["p"] ) and ( $_GET["p"] <> "" ) )
	{
		// Обрабатываем логин и пароль - от взлома
		$login = trim ( stripslashes ( htmlspecialchars ( $_GET["l"] ) ) );
		$pass = trim ( stripslashes ( htmlspecialchars ( $_GET["p"] ) ) );
		// Подключаемся к базе
 	// Вытаскиваем всех пользователей с этим логином и паролем
		$result = mysql_query ( "SELECT * FROM users WHERE login='$login' AND pass='$pass'" );
		$array = mysql_fetch_array ( $result );
		// Если такой пользователь есть
		if ( !empty ( $array ) )
		{
			// Создаём сессию и выводим информацию о успешном входе + кнопка выхода
			$_SESSION["entr"] = true;
			echo "Информация:<br />Вы вошли!<br /><br />
						<button name='exit' onclick='ajaxex();'>Выйти</button>";
		}
		else echo "Error"; // Если такого пользователя нет, то выводим сообщение о ошибке
	}

	// Если пользователь нажал на кнопку выход
	if ( isset ( $_GET["exit"] ) )
	{
		// Удаляем сессию
		unset ( $_SESSION["entr"] );
		unset ( $_SESSION["uid"] );
		unset ( $_SESSION["group_blocks"] );
		// Выводим форму входа
		echo '<div id="message"></div>
					<input type="text" id="login" class="inp" /><br />
					<input type="password" id="pass" class="inp" /><br />
					<button name="entry" onclick="ajaxcl();">Войти</button>';
	}
?>
Ответить с цитированием