Как сделать систему авторизации пользователя?

dim-dem

Новичок
Как сделать систему авторизации пользователя?

Господа!
Помогите авторизировать пользователя сессиями.
Дайте плз. простейший скрипт.
 

Апокалипсис

Guest
Тут давать никто не будет. Иди в поиск по форуму, тут это уже 1000 раз обсуждалось.
 

RomikChef

Guest
простейший пример

auth.php
PHP:
<?
session_start();
if ($_POST['user_name']=='user' AND $_POST['user_pass']=='pass') {
  $_SESSION['authorized']=1;
  if (defined("SID") AND constant("SID")) $sid="?".SID; else $sid='';
  header("Location: member.php$sid");
  exit;
}
?>
<form action="<? echo getenv('REQUEST_URI') ?>" method="POST">
Name: <input name="user_name" type="text" length="10"><br>
Pass: <input name="user_pass" type="password" length="10"><br>
<input name="submit" type="submit" value="Login">
</form>
member.php
PHP:
<?
session_start();
if (empty($_SESSION['authorized'])) {header("Location: auth.php");exit;}
?>
СЕКРЕТНАЯ ИНФА!!!
 

RomikChef

Guest
однако пример именно примитивный.
по умолчанию передача СИДа в адресной строке - выключена.
следовательно, люди с выключеными куками пролетают.

если включать передачу в урле, то надо делать проверку на IP
чтобы не выкидывать диалапщиков с оборванной связью, надо делать эту проверку только тем, кто пришел с сидом в куке...

Апокалипсис, обсуждалось-то, может, и 1000, но реального ПРОСТОГО примера не было ни разу.

Теперь будет :)
 

RomikChef

Guest
нет, нельзя.
я и так на этот убил кучу времени.
потому, что написать простой пример гораздо сложнее, чем сложный.

Если тебе нужна реальная авторизация, то так бы и просил.
ты попросил простой пример - тебе его дали. Для изучения.
говори сразу, что тебе нужно.
а привередничать - "подайте то, подайте это" - будешь в ресторане.
 

dim-dem

Новичок
RomikChef
Пасиб тебе большой за пример, просто супер!!!
А можно делать проверку так?
Я сомневаюся, что с точки зрения безопасности нельзя, поэтому и спрашиваю....
Это в обычном файле:
<?
session_start();
$session = session_id();
session_register('pas');
if (!$PHPSESSID) {
session_register('pas');
}
?>

А это в другом файле с базой данных.
<?
session_start();
$session = session_id();
require("_db.inc");
$db_lnk = db_connect();
$result_lnk=mysql_db_query("$database","SELECT * FROM $table WHERE id=$pid");
$result_rows=mysql_num_rows($result_lnk);
list($id,$pasword)=mysql_fetch_row($result_lnk);
if($pid=="" or $pas!=$pasword){
include("error_log_pass.php");
exit;
}
?>
 

vladax

Новичок
Если по-простому, то можно и так:
data.txt
---------------------
dim-dem:123
Апокалипсис:567
etc:890

auth.php
<?
$file="data.txt";
$fp=fopen($file, "r");
$auth_file=fread($fp, filesize($fp));
fclose($fh);
$authorized=0;
$elements=explode("\n", $auth_file);
foreach($elements as $element) {
list($user, $pw)=split(";", $auth_file);
if(($user==$PHP_AUTH_USER) AND ($pw==$PHP_AUTH_PW)):
$authorized=1;
break;
endif;
}
if(!authorized):
header('WWW-Authenticate: Basic realm="today's dim-dem's day"');
header("HTTP/1.0 401 Unauthorized');
print "FUCK OFF, SUCKER!!!";
exit;
else:
print "Welcome to dim-dem's world!";
endif;
?>
 

RomikChef

Guest
dim-dem
извини, я ничего не понял в твоих строчках.
А самое главное - не понял никакой связи с тем кодм, который я привел.
откуд-то у тебя взялись совершенно ненужные session_id и session_register
вдруг откуда ни возьмись взялся $pid

Зачем ты в сессию пишешь пароль?

Ничего я не понял. вообще.
Если у тебя логин и пароль в базе, то в моем коде ты должен заменить только одну строчку
if ($_POST['user_name']=='user' AND $_POST['user_pass']=='pass') {
заменив ее на три строчки обращения к базе.
ОДИН раз - при проверке пароля.
 

RomikChef

Guest
vladax, человек ясно и недвусмысленно просил авторизацию сессиями.
через foreach нумерованные массивы не выводят.
для проверки пароля в файле цикл вообще не нужен.

И вообще, все можно сделать проще. гораздо проще.
по-простому, и без кучи ошибок, HTTP авторизация выглядит так:
PHP:
$file="data.txt";
$fp=fopen($file, "r");
$auth_file=fread($fp, filesize($file));
fclose($fp);
if (!strstr($auth_file,$PHP_AUTH_USER.":".$PHP_AUTH_PW."\n")) {
  header('WWW-Authenticate: Basic realm="Realm"');
  header("HTTP/1.0 401 Unauthorized");
  echo  "Bad password";
  exit;
}
Этот код лучше всего вынести в отдельный файл и ролдключать через require в самом начале защищаемых файлов.

Два замечания. строка в файле data.txt должна заканчиваться именно на "\n", а не на "\r\n";
сам файл, ОБЯЗАТЕЛЬНО должен лежать в каталоге, недоступном пользователю веб-сервера.
а еще для надежности желательно кодировать в этом файле пароли в md5, и сверять с MD5($PHP_AUTH_PW)
 

anzor

Guest
Ну что за идиотсвтво у меня этот простой скрипт не пашетттт
Вот что выдает блинннн

Warning: open(/tmp\sess_b829edb75c74c9a98da5c4e322d36a93, O_RDWR) failed: m (2) in c:\www/auth.php on line 2


Warning: open(/tmp\sess_b829edb75c74c9a98da5c4e322d36a93, O_RDWR) failed: m (2) in Unknown on line 0

Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0
 

Mammoth

Guest
anzor

1. у тебя session.save_path выставлен в '/tmp';
2. ты работаешь под виндой;
3. у тебя отсутсвует каталог /tmp;
4. тебе лень читать мануал и пытаться понять, что тебе говорит система.
 

anzor

Guest
1. не понял что ты написал что такое session.save_path выставлен в '/tmp';
2. а под чем на до работать?
3.куда его вставить и зачем он?
4.Мне не лень просто я там ничего не догоняю!!!
 

StUV

Rotaredom
1. rtfm (в частности "прочти" php.ini)
2. под DOS'ом
3. п. 1
4. учись
 
Сверху