Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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>';
	}
?>
Ответить с цитированием
  #2 (permalink)  
Старый 30.06.2012, 18:56
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

// если ответ в виде слова - Error - то в блок message выводим сообщение о ошибке, иначе выводим то, что получили
	                        if ( xmlhttp.responseText == 'Error' ) {document.getElementById("message").innerHTML = 'Информация:<br />Данные введены не верно!';}
	                        else {document.getElementById("entry-div").innerHTML=xmlhttp.responseText; // тут наверно обновить HTML страницы 
}
Ответить с цитированием
  #3 (permalink)  
Старый 30.06.2012, 22:39
Аспирант
Отправить личное сообщение для wcb-falcon Посмотреть профиль Найти все сообщения от wcb-falcon
 
Регистрация: 11.06.2008
Сообщений: 31

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

Еще дополнительный вопрос можно ли отловить переменную сессии с помощью javascript чтобы разместить в простом коде некоторый блок который появляется после регистрации (до этого он просто скрыт стилем)
Ответить с цитированием
  #5 (permalink)  
Старый 03.07.2012, 16:16
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

сравните эти два сематически идентичных куска кода и задумайтесь.
// 1й
	    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';}


// 2й
	        var el = document.getElementById('login'),
				ep = document.getElementById('pass');
				
			el.className = (el.value == '') ? 'err' : 'inp';
			ep.className = (ep.value == '') ? 'err' : 'inp';


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

Сообщение от keen Посмотреть сообщение
сравните эти два сематически идентичных куска кода и задумайтесь.
// 1й
	    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';}


// 2й
	        var el = document.getElementById('login'),
				ep = document.getElementById('pass');
				
			el.className = (el.value == '') ? 'err' : 'inp';
			ep.className = (ep.value == '') ? 'err' : 'inp';


и так - весь код..
Я понел что это упрощение но не это нужно было в данный момент а именно использование переменной сессии ( $_SESSION["entr"] ) во вставленном коде javascript
к примеру:
var sss = $_SESSION["entr"];
if(sss==true)
alert('da');
else
alert('net');

при этому естественно сессию отловить с помощью JS
Ответить с цитированием
  #7 (permalink)  
Старый 03.07.2012, 16:28
Аватар для keen
Профессор
Отправить личное сообщение для keen Посмотреть профиль Найти все сообщения от keen
 
Регистрация: 28.03.2012
Сообщений: 376

мне лень пробираться сквозь стену грамматических ошибок, за которой кроется ваш вопрос.
от слов "зарегестрированные", "понел" и "при этому" мне становится дурно. про знаки препинания вообще молчу.
Ответить с цитированием
  #8 (permalink)  
Старый 05.07.2012, 12:13
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от wcb-falcon Посмотреть сообщение
Еще дополнительный вопрос можно ли отловить переменную сессии с помощью javascript чтобы разместить в простом коде некоторый блок который появляется после регистрации (до этого он просто скрыт стилем)
Нет.
javascript выполняется на клиенте (в браузере), а переменная сессии формируется в PHP на сервере, поэтому из javascript Вы её никак не увидите.
Однако, это и не нужно. Так как Вы используете xmlhttp, то после успешной авторизации просто включайте видимость своего скрытого блока. Если же после авторизации Вы делаете полную перезагрузку страницы (что глупо при использовании аджакса), то формирование Вашего скрытого блока опять же надо делать на сервере в PHP, а не в javascript, т.е. для неавторизованного пользователя не формировать html-блок, а для авторизованного формировать.
Ответить с цитированием
  #9 (permalink)  
Старый 05.07.2012, 14:59
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Сообщение от wcb-falcon
Я понел что это упрощение но не это нужно было в данный момент а именно использование переменной сессии ( $_SESSION["entr"] ) во вставленном коде javascript
к примеру:
показать чистый исходник в новом окнеСкрыть/показать номера строкпечать кода с сохранением подсветки1var sss = $_SESSION["entr"]; 2if(sss==true) 3alert('da'); 4else5alert('net');
при этому естественно сессию отловить с помощью JS
Обрамите на подгружаемой странице скрипт с данной переменной в уникальные теги
*Тег <object id='SessionScript'> - редко используется - далее можно распарсить контент тега скриптом
Ответить с цитированием
  #10 (permalink)  
Старый 05.07.2012, 16:50
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от Deff Посмотреть сообщение
Обрамите на подгружаемой странице скрипт с данной переменной в уникальные теги
*Тег <object id='SessionScript'> - редко используется - далее можно распарсить контент тега скриптом
Ну зачем так сложно? Сначала воткнуть в HTML, потом вытащить оттуда джаваскриптом... Можно сразу передать в переменную javascript:
var sss = '<? echo $_SESSION["entr"] ?>';
Но только всё же зачем??
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
ajax чат проблема с записью сообщения в базу данных mysql. Niksik AJAX и COMET 4 15.01.2012 14:04
Запуск php скрипта через ajax hagen3 AJAX и COMET 2 09.09.2011 03:51
php session а в ajax Sadist_dead AJAX и COMET 1 19.08.2011 18:35
AJAX обращение к файлу php и получение значения zeraid jQuery 8 28.03.2011 14:46