Текущий архив: 2010.08.27;
Скачать: CL | DM;
ВнизЛогико-техническое ветвление в PHP. Как? Найти похожие ветки
← →
12 © (2010-04-28 13:04) [0]Надо в зависимости от логин/пароль ветвится
Пишу так
если пользователь в БД есть, то переход
{
include_once "Work.php";
}
правильно?
Гложет смутное сомнение,
если просто набрать в строке site\Work.php
то результат будет тот же
Если передать в Work.php что-то типа
$_SESSION["user_id"] и проверять, что не с балды зашли, а через авторизацию?
Я еще хочу много форм написать, и перекидывать юзера между ними
но тогда это что же получается - всегда проверять и постоянно?
Наверное, неправильно что-то или думаю или делаю..
← →
antonn © (2010-04-28 13:09) [1]в корне сайта вызываемые скрипты, в кажом в начале создается переменная флаг.
в подпапке находятся скрипты для инклуда, в каждом проверяется наличие переменной-флага. Плюс на апаче можно кинуть htaccess с "deny from all"
← →
TUser © (2010-04-28 13:09) [2]
> Гложет смутное сомнение,
> если просто набрать в строке site\Work.php
> то результат будет тот же
пиши work.php.inc, и храни его в месте, откуда сервер не выдаст листинг
php его нормально подинклюдит, а вот отдельно выполнять не будет (ну, если апач не настроить специально)
← →
McSimm © (2010-04-28 13:48) [3]
> а вот отдельно выполнять не будет (ну, если апач не настроить
> специально)
Будет.
На этом базируются некоторые методы взлома (не буду конкретизировать)
← →
Идентификация (2010-04-28 14:05) [4]
//Идентификация
session_start();
if ($_SESSION["authorized"]<>1) {
header("location:admin/index.php");
exit;
}
← →
xayam © (2010-04-28 14:09) [5]
> 12 © (28.04.10 13:04)
> Гложет смутное сомнение, если просто набрать в строке site\Work.php
> то результат будет тот же
> antonn © (28.04.10 13:09) [1]
> Плюс на апаче можно кинуть htaccess с "deny from all"
Можно специальный символ в именах файлов ввести, который будет означать что прямой доступ к скрипту запрещен и настроить .htaccess, например, так для знака подчеркивания:
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^(.*)_(.*)$ /404.php [L,QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?$1 [L,QSA]
</IfModule>
Соответственно скрипт переименовать в _Work.php, ну и сессии конечно проверять. Не?
← →
MonoLife © (2010-04-28 14:14) [6]
> Если передать в Work.php что-то типа
> $_SESSION["user_id"] и проверять, что не с балды зашли,
> а через авторизацию?
Может, в первый раз куки недолговременные записать, а потом проверять их?
← →
12 © (2010-04-28 14:17) [7]спасибо
буду пробовать
← →
12 © (2010-04-28 14:17) [8]
> куки
нежелательны
← →
antonn © (2010-04-28 14:21) [9]куки - это клиентский текст, там что угодно может быть
← →
12 © (2010-04-28 14:22) [10]
> Идентификация (28.04.10 14:05) [4]
так примерно и писал
mssql_select_db("ccc",$link);
if($_SESSION["user_id"] == -1)
{ $login = isset($_POST["login"])?$_POST["login"]:"";
$passwd = isset($_POST["passwd"])?$_POST["passwd"]:"";
if($login != "" || $passwd != "")
{ $sql = "SELECT * FROM rnrEmployee WHERE Login = "$login" AND Pass = "$passwd"";
$qry = mssql_query($sql, $link);
if($qry)
{ if(mssql_num_rows($qry) > 0)
{ echo "Доступ разрешен<br />" . "\n";
$row = mssql_fetch_array($qry);
echo "Пользователь: " . $row["EmployeeName"];
$_SESSION["user_id"] = $row["IdEmployee"];
$_SESSION["user_name"] = $row["EmployeeName"];
include_once "IndexFirst.php";
}
else
{ echo "Доступ запрещен!";
echo "Введите логин и пароль";
echo "<form action=\"index.php\" method=\"post\" enctype=\"application/form-data\">";
echo "<input type=\"text\" value=\"\" name=\"login\" />";
echo "<input type=\"password\" value=\"\" name=\"passwd\" />";
echo "<input type=\"submit\" value=\"LogIn\" />";
echo "</form>";
}
}
}
else
{ echo "Введите логин и пароль";
echo "<form action=\"index.php\" method=\"post\" enctype=\"application/form-data\">";
echo "<input type=\"text\" value=\"\" name=\"login\" />";
echo "<input type=\"password\" value=\"\" name=\"passwd\" />";
echo "<input type=\"submit\" value=\"LogIn\" />";
echo "</form>";
}
}
else
{ echo "Здравствуйте, " . $_SESSION["user_name"]; }
← →
12 © (2010-04-28 14:23) [11]
> antonn © (28.04.10 14:21) [9]
>
> куки - это клиентский текст, там что угодно может быть
и могут неприниматься браузером
← →
xayam © (2010-04-28 14:27) [12]
> 12 © (28.04.10 14:22) [10]
экранирование mysql_real_escape_string ($login) и mysql_real_escape_string ($passwd) забыл написать :)
← →
xayam © (2010-04-28 14:35) [13]опс, не знаю такая штука для ms есть или нет?
← →
Dimka Maslov © (2010-04-28 15:08) [14]Подключаемому файлу даём расширение inc затем записываем в .htaccess
<Files *.inc>
order allow,deny
deny from all
</Files>
← →
MonoLife © (2010-04-28 18:53) [15]
> и могут неприниматься браузером
браузером много что может "не приниматься":) в т.ч. и ява-скрипты и т.п.
Но, собственно, согласен, с куками чревато..
> так примерно и писал
пароль хранится в открытом виде?
← →
ProgRAMmer Dimonych © (2010-04-28 19:21) [16]Узнал много новых способов извращений. IMHO :)
Использовал в нескольких реальных (уже оплаченных ;)) проектах такой кусочек кода:if (basename($_SERVER["SCRIPT_FILENAME"]) == basename(__FILE__))
{
echo "<h1>This script is not for execution!</h1>"; exit;
}
Случаев, чтобы не работало, ещё не видел. Вставляется в начале "невыполняемого" скрипта.
Плюсы: не требуется доступа к .htaccess и т.п. (не на всех хостингах его дают, особенно бесплатных), не нужно ничего передавать пользователю (как в случае с сессиями и куками)...
Кстати, по [0]... Мне одному кажется, что включение куска кода и выполнение фрагмента кода - действия немного разные? Использую подключение по "паскалевскому" принципу: программа, а остальные - библиотеки, т.е. только набор функций. Задержек по времени выполнения не замечал.
P.S. Всё вышесказанное - тройное IMHO.
← →
12 © (2010-04-29 08:08) [17]
> ProgRAMmer Dimonych © (28.04.10 19:21) [16]
подумаю над этим.
> пароль хранится в открытом виде?
пока да. Я же учусь..
← →
12 © (2010-04-29 09:09) [18]вопрос к коду из [10]
почему, когда после успешной регистрации нажимаешь обновить - браузер (и IE, и FF) спрашивают о повторении отправки неких(??) данных?
а теперь я написал в самом начале
<?php
if (isset($bgcolor)) { setcookie("bgcolor", $bgcolor, time()+3600);}
session_start();
и тд
и теперь, если обновить, о повторении отправки больше не спрашивает.
Причем кукис этот нигде больше не используется
Такое впечатление, что только по факту использования кука, браузер работает иначе.
на всякий, весь код еще раз<?php
if (isset($bgcolor)) { setcookie("bgcolor", $bgcolor, time()+3600);}
session_start();
if (!$_SESSION["user_id"])
$_SESSION["user_id"] = -1;
include "Head.php";
//include "Tables.php";
include_once "MsSql.php";
if (ConnectMssql("192.168.17.9,1433", "DieLogin", "DerParol", $link) == 0)
{
// echo "Соединен! <br>";
}
else
{
echo "НЕ соединен <br>";
}
mssql_select_db("ccc",$link);
if($_SESSION["user_id"] == -1)
{ $login = isset($_POST["login"])?$_POST["login"]:"";
$passwd = isset($_POST["passwd"])?$_POST["passwd"]:"";
if($login != "" || $passwd != "")
{ $sql = "SELECT * FROM rnrEmployee WHERE Login = "$login" AND Pass = "$passwd"";
$qry = mssql_query($sql, $link);
if($qry)
{ if(mssql_num_rows($qry) > 0)
{ echo "Доступ разрешен <br>";
$row = mssql_fetch_array($qry);
echo "Пользователь: " . $row["EmployeeName"]."<br>";
$_SESSION["user_id"] = $row["IdEmployee"];
$_SESSION["user_name"] = $row["EmployeeName"];
include_once "IndexFirst.php";
}
else
{ echo "Доступ запрещен! <br>";
echo "Введите логин и пароль";
echo "<form action=\"index.php\" method=\"post\" enctype=\"application/form-data\">";
echo "<input type=\"text\" value=\"\" name=\"login\" />";
echo "<input type=\"password\" value=\"\" name=\"passwd\" />";
echo "<input type=\"submit\" value=\"LogIn\" />";
echo "</form>";
}
}
}
else
{ echo "Введите логин и пароль <br>";
echo "<form action=\"index.php\" method=\"post\" enctype=\"application/form-data\">";
echo "<input type=\"text\" value=\"\" name=\"login\" />";
echo "<input type=\"password\" value=\"\" name=\"passwd\" />";
echo "<input type=\"submit\" value=\"LogIn\" />";
echo "</form>";
}
}
else
{ echo "Здравствуйте, " . $_SESSION["user_name"]."<br>";
include_once "IndexFirst.php";
}
//<?php
//mssql_free_result($res);
mssql_close($link);
echo "<br>";
include "Foot.php";
?>
← →
ProgRAMmer Dimonych © (2010-05-02 13:03) [19]> [18] 12 © (29.04.10 09:09)
А точно что-то меняется от куки? Я, например, не вижу нигде после успешной обработки POST-запроса редиректа. Соответственно при обновлении страницы, выданной по итогам обработки брофзер думает, а стоит ли отправлять повторно уже отправленные для получения этой страницы данные. Отправить - возможно, продублировать информацию в базе или ещё что-нить в таком духе, не отправить - вообще никакой страницы можно не получить.
P.S. Особо не вчитывался.
← →
Dimka Maslov © (2010-05-03 20:49) [20]
> почему, когда после успешной регистрации нажимаешь обновить
> - браузер (и IE, и FF) спрашивают о повторении отправки
> неких(??) данных?
Если страница получена по запросу POST обновление страницы подразумевает повторную отправку данных формы. Чтобы этого не происходило, скрипт, получивший данные должен выдать браузеру редирект.
← →
12 © (2010-05-05 15:07) [21]
> скрипт, получивший данные должен выдать браузеру редирект.
как это?
← →
Lamer@fools.ua © (2010-05-05 16:14) [22]
> 12 © (05.05.10 15:07) [21]
> > скрипт, получивший данные должен выдать браузеру редирект.
> как это?
http://en.wikipedia.org/wiki/List_of_HTTP_status_codes#3xx_Redirection
← →
ProgRAMmer Dimonych © (2010-05-05 23:47) [23]А проще - в соли, специальной соли, в которой есть йод (С) Реклама
header("Location: index.php");
← →
12 © (2010-05-06 08:30) [24]это понятно, но написано
PHP redirect
Redirect или перенаправление на другую страницу в PHP осуществляется путем отправки специального HTTP заголовка функцией header:
<?php
header("Location: http://www.tigir.com/php.htm");
exit;
?>
ВАЖНО!!! Заголовки функцией header нужно отправлять до любого вывода текста в браузер! Даже перед <?php не должно быть пробелов!
Как это сделать, когда страница загружена и есть поля ввода в зависимости от которых надо направлять по разным направлениям?
← →
12 © (2010-05-06 08:41) [25]понял кажись
в примере моем надо
<?php
session_start();
if ($_SESSION["user_id"] > 0) {
header("Location: http://www.tigir.com/php.htm");
exit;
}
так написать, вроде
← →
xayam © (2010-05-06 08:46) [26]
> Как это сделать, когда страница загружена и есть поля ввода
> в зависимости от которых надо направлять по разным направлениям?
Одно из двух:
document.location.href = "http://<?php echo $_SERVER["SERVER_NAME"]; ?>";
<?php if ( ? ) echo "<meta HTTP-EQUIV=\"REFRESH\" CONTENT=\"0;URL=http://{$_SERVER["SERVER_NAME"]}/...\" />"; ?>
Не?
← →
xayam © (2010-05-06 08:57) [27]хотя по-моему лучше header пользоваться и все условия до вывода производить и в зависимости от результата сравнения формировать результирующую страницу, тогда, во-первых, вся структура сайта в одном входном месте (index.php) и, во-вторых, ЧПУ элементарно делается на основе .htaccess [5] и кода разбора входящего раздела на php примерно так:
<?php
error_reporting ( E_ALL & ~ E_NOTICE );
set_time_limit ( 300 );
$params = explode ( "/", $_SERVER ["QUERY_STRING"] );
require_once "_mydbconfig.php";
for($i = 0; $i < count ( $params ); $i ++)
$params [$i] = mysql_real_escape_string ( $params [$i] );
//...здесь анализ разделов/подразделов, которые храняться в массиве $params
?>
← →
12 © (2010-05-06 09:10) [28]echo "<meta HTTP-EQUIV=\"REFRESH\" CONTENT=\"0;URL=http://www.ya.ru\" ";
работает, спасибо..
книжку бы мне, тока путевую,
через web тока кусочно-непрерывно получается учится :)
← →
xayam © (2010-05-06 09:15) [29]
> книжку бы мне, тока путевую,
http://www.htmlbook.ru/ (рус. справочник html/css, книга, статьи, примеры)
http://www.htmlref.com/ (анг. справочник html/css, примеры)
http://www.php.net/ :)
← →
xayam © (2010-05-06 09:21) [30]и в догонку:
http://jquery.com/ для супер-пупер сайтов, как у меня :)
http://jqueryui.com/ виджеты-плагины для jquery
http://biblio-globus.ru/description.aspx?product_no=9491903 и книга по всему этому делу
← →
12 © (2010-05-06 15:04) [31]
> echo "<meta HTTP-EQUIV=\"REFRESH\" CONTENT=\"0;URL=http:
> //www.ya.ru\" ";
> работает, спасибо..
работает то работает, но
> echo "id =" . $_SESSION["user_id"]."<br>";
> echo "name =" . $_SESSION["user_name"]."<br>";
не видит уже ничего..
не понимаю что-то, для особо одаренных, напишите пожалуйста пример
как понял, надо 4 файла
1. Регистрация
2. ДА
3. НЕТ
4. Работа
с Регистрации, в зависимости от, переправляем на ДА или НЕТ
ДА и НЕТ - заранее подготовленные, с авторедиректом.if ($_SESSION["user_id"] > 0) { //перенаправить
header("Location: IndexFirst.php");
exit;
}
ДА на Работа, НЕТ на Регистрация
регистрация \
/ \ /
ДА НЕТ
/
работа
Так?
А как вызывать эти ДА и НЕТ?
что-то совсем запутался - то вдруг опять переотправить данные просит, то не просит, но тогда не видит сессии.
← →
12 © (2010-05-06 15:06) [32]кстати, а как сессия реализована?
Как это может сервер помнить клиента?
Я делал на delphi вставкой скрытых полей, но тут нет ничего такого. Куки запрещены. Как же помнит? Принцип какой?
Если быстро никак не объяснить - то не надо, потом дойду.
← →
antonn © (2010-05-06 15:27) [33]
> ВАЖНО!!! Заголовки функцией header нужно отправлять до любого
> вывода текста в браузер! Даже перед <?php не должно быть
> пробелов!
> Как это сделать, когда страница загружена и есть поля ввода
> в зависимости от которых надо направлять по разным направлениям?
>
поля ввода лежат в FORM, у которого есть action.
А по поводу хедеров: есть распространенный затык, когда скрипты в юникоде не дают котправить заголовок, из-за BOM. Эту метку всегда ставит notepad.exe, и проинклудив такой скрипт выведется сначала BOM, а потом попытается отправиться хедер, ругаца будет :)
> кстати, а как сессия реализована?
> Как это может сервер помнить клиента?
сессии - обычно файл на сервере, к клиенту "привязывается" через SID, это текстовая строчка похожая на хеш. Если клиент подерживает куки то SID хранится в куках, если клиент не поддерживает куки - при генерации страницы добавляется ко всем внутренним ссылкам и формам (в ссылках параметр, в формах невидимое поле). При самом первом заходе когда куки чисты страница отдается именно с такими подставленными параметрами (хорошо видно на форумах ipb, хоть у них и свои сессии).
← →
12 © (2010-05-06 15:37) [34]
> поля ввода лежат в FORM, у которого есть action.
ну да.
есть index.php, в нем есть FORM, у форм есть action. Он у меня равен index.php
т.е. опять же сам и смотрит что ввели.
А надо на другой скрипт? (чтоб не просил переотправить данные, если щелкнуть на Обновить. Ну, как Маслов сказал.. тока я не понял)
> сессии - обычно файл на сервере, к клиенту "привязывается"
> через SID, это текстовая строчка похожая на хеш. Если клиент
> подерживает куки то SID хранится в куках, если клиент не
> поддерживает куки - при генерации страницы добавляется ко
> всем внутренним ссылкам и формам (в ссылках параметр, в
> формах невидимое поле). При самом первом заходе когда куки
> чисты страница отдается именно с такими подставленными параметрами
> (хорошо видно на форумах ipb, хоть у них и свои сессии).
А! Так и знал, все- таки обманывают :)
Так и сам могу..
← →
antonn © (2010-05-06 16:05) [35]
>
> А надо на другой скрипт? (чтоб не просил переотправить данные,
> если щелкнуть на Обновить. Ну, как Маслов сказал.. тока
> я не понял)
я разделаю скрипты вывода и внесения информации, в index.php отправляю данные чата (к примеру) скрипту chat_add.php, а в нем в конце делаю:header("Location: index.php");
При обновлении страницы спокойно опять обновится index.php без повторной отправки. Привычка у меня такая - разделять, не люблю когда все в одну кучу мешается.
← →
ProgRAMmer Dimonych © (2010-05-10 18:26) [36]> [34] 12 © (06.05.10 15:37)
Можно и на тот же, главное - чтобы он понял, чего от него хотят. POST-данные в любом случае не переотправятся. Если при успешной обработке POST-запроса чистить сессию или добавлять в неё какое-нибудь хитрое значение (по вкусу) - то проблема с определением ситуации отпадает.
← →
12 © (2010-05-12 10:56) [37]БЛИН!!!!
session_start();
забыл :) Потому то и SESSION["user_id"] не помнил у меня, а я всю башку сломал, и всех напряг..
include_once "ConstantsRNR.php";
if (isset($_SESSION["user_id"]))
{
if ($_SESSION["user_id"] < 0)
{
header("Refresh: 5; URL=".$site_path."");
echo "Вы или неавторизовались или долго ничего не делали, например отходили от компьютера <br>";
echo "Через 5 сек. вы будете перенаправлены на регистрацию, для подтверждения, что подошли к компьютеру именно Вы.<br>";
exit;
}
}
else
{
header("Refresh: 5; URL=".$site_path."");
echo "Вы или неавторизовались или долго ничего не делали, например отходили от компьютера";
echo "Через 5 сек. вы будете перенаправлены на регистрацию, для подтверждения, что подошли к компьютеру именно Вы .";
exit;
}
Страницы: 1 вся ветка
Текущий архив: 2010.08.27;
Скачать: CL | DM;
Память: 0.57 MB
Время: 0.067 c