|
|
|
|
<?php
// Это файл handler.php
// Имя сервера базы данных, например $dblocation = "mysql28.noweb.ru"
// сейчас выставлен сервер локальной машины
$dblocation = "192.168.1.202";
// Имя базы данных
$dbname = "knp";
// Имя пользователя... Скорее всего будет совпадать с вашим доменным именем
// у нас, например $dbuser = "softtime";
$dbuser = "root";
// Пароль - в комментариях не нуждается ;-)
$dbpasswd = "wrdz98x";
// Соединяемся с сервером базы данных
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) {
echo( "<P>В настоящий момент сервер базы данных не
доступен, поэтому корректное отображение
страницы невозможно.</P>" );
exit();
}
// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbcnx) ) {
echo( "<P>В настоящий момент база данных не доступна,
поэтому корректное отображение страницы
невозможно.</P>" );
exit();
}
// Формируем и выполняем SQL-запрос для посетителя с
// именем $_POST['name']
$query = "SELECT password FROM avtoriz WHERE login='".$_POST['name']."'";
$nme = mysql_query($query);
if(!$nme)
{
echo mysql_error();
echo "Ошибка выполнения запроса";
exit();
}
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
// Получаем пароль
$password = mysql_result($nme, 0);
// Сравниваем пароль из базы данных и введённый посетителем
if ($_POST['password'] == $password)
{
// Идентификация прошла успешно - осуществляем
// "вход" посетителя. Для того, чтобы в течении текущей
// сесси посетитель не вводил своё имя пароль повторно -
// передаём их через сессию
if(session_start())
{
# $_SESSION['user'] = $_POST['name'];
# $_SESSION['password'] = $_POST['password'];
$user = $_POST['name'];
session_register("user");
// Осуществляем автоматический переход на
// страницу index.php чтобы убедится, что
// посетитель "вошёл"
# print $HTTP_SESSION_VARS["user"];
Header("Location: men.php");
}
}
else
{
#echo "Ошибка идентификации: неправильный пароль";
include ("index.php");
exit();
}
}
// Если в результате запроса не получено ни одной
// строки - посетитель с таким именем не зарегистрирован
else
{
# echo "Ошибка идентификации: посетитель не зарегистрирован";
include ("index.php");
exit();
}
?>
|
Данный скрипт должен передавать через сессию логин юзера в следующий скрипт :
<HTML>
<HEAD>
<META http-equiv="Content-Language" content="ru">
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<Title>WEB сервер УС БоГЭС</title>
</HEAD>
<body bgcolor="black" alink="Lime" link="lime" vlink="lime" text="Yellow">
<?
include("style.inc");
?>
<table bgcolor='#003366' border="1" width="150">
<tr>
<td width="100%" bgcolor="#0000FF"><center>
<font color="#FFFFFF">БоГЭС</font></center></td>
</tr>
<?
session_start();
print $HTTP_SESSION_VARS["user"];
#print $_SESSION['user'];
include "knp/connect.php";
$ath=mysql_query("select id from avtoriz where login='".$HTTP_SESSION_VARS["user"]."'");
$result=mysql_result($ath,'id');
switch ($result)
{
#####################################################################
case "1": include_once "admin.php"; break;
case "2": include_once ""; break;
#default: include_once "index.php";
#####################################################################
}
?>
<tr>
<td>
<?
$id = $_GET['id'];
include_once "$id";
?>
</td>
</tr>
</table>
|
Но почемуто я не могу увидеть переменную
print $HTTP_SESSION_VARS["user"];
Одним словом данные не доходят. почему ??????
register_globals = Off | |
|
|
|
|
|
|
|
для: Felix
(14.01.2005 в 10:29)
| | >Но почемуто я не могу увидеть переменную
print $HTTP_SESSION_VARS["user"];
Хм.. А попробуйте обратиться к массиву $_SESSION
<?
print $_SESSION["user"];
?>
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(14.01.2005 в 11:53)
| | Пробовал, эффект тот же самый а точнее нулевой.
Что еще может быть ? | |
|
|
|
|
|
|
|
для: Felix
(14.01.2005 в 12:13)
| | Опять тоже самое что и прошлый раз - вызов функции session_start() после вывода в окно браузера (HTML), сервер не может в результате отослать требование браузеру установить сессионный cookie с идентификатором сессиии, функцию session_start() следует вызывать первой в файле
<?php
session_start();
?>
|
Причём это следует делать в каждом файле, где используются сессии.
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1461 | |
|
|
|
|
|
|
|
для: cheops
(14.01.2005 в 13:09)
| | мы тут три дня с шефом бились над проблемой. у одной клиентки (из 40 купивших наш интернет-магазин) вдруг, ни с того ни с сего начали пропадать переменные сессии.
примерно 10 страниц от входа в магазин он проходит нормально, переменные передаются. на 11-й - бабах, открывается новая сессия, старые переменные пропадают.
прочитали, что в IE6 есть такой баг - когда используются одновременно и сессии и куки, они могут путаться между собой. заставили клиентку обновить IE, поставить сервис-пак. не помогло!
главное, у всех остальных работает, у нас на всех компах работает, даже у нее в Нетскейпе - работает!
потом мы начали передавать номер сессии в скрытом поле формы. опять - у нас работает, у нее не работает. потом я обнаружила, что шеф не прописал в форме enctype. поставили text/plain - переменные передаются. но потом с этим enctype перестала работать отсылка данных в банк на их платежную систему. а когда ставим multipart-form-data - в банк посылает, но между страницами просмотра заказа и оформления платежа не пересылает. бред!
вообщем, пришлось изощряться - посылаем в скрытом поле номер сессии, потом присваиваем его session_id() и открываем сессию с нужным нам номером.
вот такие чудеса случаются. | |
|
|
|
|
|
|
|
для: cheops
(14.01.2005 в 13:09)
| | У меня в php.ini стоит output_buffering = 4096, тоесть с таким параметром как я понимаю вызов функции session_start() возможен в любом месте скрипта. Этоо во первых.
А во вторых пробовал я ставить session_start() и в начале скрипта все равно эффект тот же самый то есть нулевой.
PS: Как оказалось, вход не произходит только в первого раза. Если я нажимаю в браузере кнопку "назад" а потом повторно ввожу имя и пароль то все работает нормально.
Почему не входит с первого раза ? | |
|
|
|
|
|
|
|
для: Felix
(17.01.2005 в 03:38)
| | Хм... посмотрите в конфигурационном файле php.ini значение директивы register_long_arrays - она включена?
register_long_arrays = On
|
или выключена
register_long_arrays = Off
|
| |
|
|
|
|
|
|
|
для: cheops
(17.01.2005 в 13:37)
| | У меня в php.ini данная директива вообще отсутствует.
Ее нужно создать?? а с каким параметром?? | |
|
|
|
|
|
|
|
для: Felix
(18.01.2005 в 04:46)
| | Хм... а PHP какой версии? Дело в том, что длинные суперглобальные массивы в формате $HTTP_***_VARS, считаются устаревшей конструкцией и директива register_long_arrays - позволяет включать их использование и отключить. Вам следует их включить:
register_long_arrays = On
|
| |
|
|
|
|
|
|
|
для: cheops
(18.01.2005 в 14:16)
| | Я добавилв php.ini директиву register_long_arrays = On
только толку от этого никакого. Все равно регистрация происходит только со второго раза. | |
|
|
|
|
|
|
|
для: Felix
(19.01.2005 в 06:20)
| | Хм... именно с той формой и обработчиком, которые приведены выше? | |
|
|
|
|
|
|
|
для: cheops
(19.01.2005 в 12:41)
| | Да именно с той формой и обработчиком которые выше. | |
|
|
|
|
|
|
|
для: Felix
(19.01.2005 в 12:58)
| | Я сейчас уезжаю, но вечером потестирую тщательно потестирую вашу форму и обработчик на локальной машине... скорее всего это ничего не даст, но по крайней мере мы исключим код (ну или найдём ошибку). | |
|
|
|
|
|
|
|
для: cheops
(19.01.2005 в 13:02)
| | Вот еще раз выкладываю скрипты
немного измененные но на работу не изменения существенно не влияют
<?php
session_start();
// Это файл handler.php
// Имя сервера базы данных, например $dblocation = "mysql28.noweb.ru"
// сейчас выставлен сервер локальной машины
$dblocation = "192.168.1.202";
// Имя базы данных
$dbname = "knp";
// Имя пользователя... Скорее всего будет совпадать с вашим доменным именем
// у нас, например $dbuser = "softtime";
$dbuser = "root";
// Пароль - в комментариях не нуждается ;-)
$dbpasswd = "wrdz98x";
// Соединяемся с сервером базы данных
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
if (!$dbcnx) {
echo( "<P>В настоящий момент сервер базы данных не
доступен, поэтому корректное отображение
страницы невозможно.</P>" );
exit();
}
// Выбираем базу данных
if (! @mysql_select_db($dbname,$dbcnx) ) {
echo( "<P>В настоящий момент база данных не доступна,
поэтому корректное отображение страницы
невозможно.</P>" );
exit();
}
// Формируем и выполняем SQL-запрос для посетителя с
// именем $_POST['name']
$query = "SELECT password FROM avtoriz WHERE login='".$_POST['name']."'";
$nme = mysql_query($query);
if(!$nme)
{
echo mysql_error();
echo "Ошибка выполнения запроса";
exit();
}
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($nme) > 0)
{
// Получаем пароль
$password = mysql_result($nme, 0);
// Сравниваем пароль из базы данных и введённый посетителем
if ($_POST['password'] == $password)
{
// Идентификация прошла успешно - осуществляем
// "вход" посетителя. Для того, чтобы в течении текущей
// сесси посетитель не вводил своё имя пароль повторно -
// передаём их через сессию
# $_SESSION['user'] = $_POST['name'];
# $_SESSION['password'] = $_POST['password'];
$user = $_POST['name'];
session_register("user");
// Осуществляем автоматический переход на
// страницу index.php чтобы убедится, что
// посетитель "вошёл"
Header("Location: men.php");
# echo "<HTML><HEAD><META HTTP-EQUIV='Refresh' CONTENT='0; URL=men.php'></HEAD><body>";
}
else
{
#echo "Ошибка идентификации: неправильный пароль";
Header("Location: index.php");
exit();
}
}
// Если в результате запроса не получено ни одной
// строки - посетитель с таким именем не зарегистрирован
else
{
# echo "Ошибка идентификации: посетитель не зарегистрирован";
Header("Location: index.php");
exit();
}
?>
|
и обработчик
<?
session_start();
if(isset($_POST['exit']))
{
session_unset();
session_destroy();
Header("Location: ../index.php");
}
?>
<HTML>
<HEAD>
<META http-equiv="Content-Language" content="ru">
<META http-equiv="Content-Type" content="text/html; charset=windows-1251">
<Title>WEB сервер УС БоГЭС</title>
</HEAD>
<body bgcolor="black" alink="Lime" link="lime" vlink="lime" text="Yellow">
<?
include("style.inc");
?>
<table bgcolor='#003366' border="1" width="15%">
<tr>
<td width="100%" bgcolor="#0000FF"><center>
<font color="#FFFFFF">БоГЭС</font></center></td>
</tr>
<?
include "knp/connect.php";
$ath=mysql_query("select id from avtoriz where login='".$HTTP_SESSION_VARS["user"]."'");
// Если запрос вернул результат - производим дальнейшую обработку
if(mysql_num_rows($ath) > 0)
{
// Получаем id
$id = mysql_result($ath, 0);
switch ($id)
{
#####################################################################
case "1": include_once "knp/user/admin.php"; break;
case "2": include_once "knp/user/vitp.php"; break;
#default: include_once "index.php";
#####################################################################
}
}
if(!isset($_POST['exit']))
{
print"<tr><td>";
print"<form action='' method='POST'>
<input type='submit' name='exit' value='закончить работу'></td></tr>";
}
?>
</table></form>
<?
$id = $_GET['id'];
include_once "$id";
?>
|
| |
|
|
|
|
|
|
|
для: Felix
(20.01.2005 в 06:05)
| | Так и не добрался вчера до вашего скрипта :((( Сегодня будут делать... | |
|
|
|
|
|
|
|
для: cheops
(20.01.2005 в 08:07)
| | У меня приведённый выше вариант, после подстановки соответствущих параметоров баз данных и закомментаривание вызовов файлов, которых у меня нет - работает. Может дело действительно в сервере - попробуйте написать простейший отладочный скрипт - он работает? | |
|
|
|
|
|
|
|
для: cheops
(20.01.2005 в 20:06)
| | А какой отладочный скрипт надо написать ? | |
|
|
|
|
|
|
|
для: Felix
(21.01.2005 в 04:57)
| | Например, создать файл index.php следующего содержания
<?php
// Инициируем сессию
session_start();
// Помещаем переменную в сессию
$_SESSION['name'] = "value";
// Переходим на другую страницу
echo "<a href=index1.php>проверка</a>";
?>
|
а в index1.php вывести дамп суперглобального массива $_SESSION
<?php
// Инициируем сессию
session_start();
// Выводим содержимое массива
print_r($_SESSION);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(21.01.2005 в 12:51)
| |
<?php
// Инициируем сессию
session_start();
echo session_id();
// Помещаем переменную в сессию
$_SESSION['name'] = "value";
// Переходим на другую страницу
echo "<a href=qq1.php>проверка</a>";
?>
|
и файл qq1.php
<?php
// Инициируем сессию
session_start();
echo session_id();
// Выводим содержимое массива
print_r($_SESSION);
echo $_SESSION['name'];
//echo session_id();
?>
|
и сесия qq отличается от qq1. кроме сессий ничего не выводится - хост | |
|
|
|
|
|
|
|
для: Андрюха.
(01.06.2005 в 16:27)
| | Давайте вопрос в какой-нибудь одной теме обсуждать :)))
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=4367 | |
|
|
|
|
|
|
|
для: cheops
(01.06.2005 в 20:46)
| | Буквально на днях столкнулся с такой же праблой что и автор этой темы,
тут модифицировал малёху отладочный скрипт от cheops'а ,
может кому нить и понадобится ....ХЫ...
файл test.php :
<?php
Error_Reporting(0);
$name=$_POST['name'];
if(isset($_POST['action']))
{
if($name==""){
$submit = false;
}
if($name!==""){
session_start();
$_SESSION['name']=$name;
Header("Location: itog.php");
}
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Проверка регистрации переменных при отключеной register_global</title><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"></head>
<body onload="document.form.name.focus();"><center><font color=blue size=10>Введите какое нибудь имя для теста</font>
<form action="test.php" method="post" name="form">
<input type="hidden" name="action" value="">
<input type="text" name="name" value=""> <br><br>
<input type="submit" name="submit" value="проверка">
</form></center>
</body></html>
|
файл itog.php :
<?php
Error_Reporting(0);
print "<title>Итог Теста</title>";
// Инициируем сессию
session_start();
if(!$_SESSION['name']){
print "<center><font color=red size=16>Переменной login Нет в супер-глобальном массиве!<br> обратитесь к документации по настройке php на вашем сервере</font></center>";
exit;
}
else{
// Выводим содержимое массива
print "<center><font color=green size=18>Всё работает:</font></center><br><center><font color=darkblue size=14>Логин: <b>".$_SESSION['name']."</b><br><br>id сессии: <b>".session_id()."</b><br></font></center>";
exit;
}
?>
|
ЗЫ: Модераторам > Если Ошибся где то в терминологии поправте пожалуйста...
спасибо за внимание... | |
|
|
|