авторизация
1.
xass (17.11.2009 / 15:41)
<?php
session_name (md5('SSS'));
session_start ();
$view = isset ( $_GET['view'] ) ? $_GET['view'] : NULL;
require_once('header.php');
require_once('functions.php');
switch ($view) {
default:
echo "hellow world :D ";
break;
case pirmais:
.....
break;
case lalala:
....
break;
case login:
echo '<center><form action="" method="POST" name="login" >
Login<br/><input type="text" class="inp" name="eml" size="23" value="" /><br />
Password<br/><input type="password" size="23" /><br />
<input id="" class="" type="submit" name="login" value="Ienākt"/>
</form></center>';
break;
}
require_once('footer.php');
?>
помогите зделать авторизацию
2.
xass (17.11.2009 / 15:43)
если ползаватеь гость тогда ему откриваетса
case login:
итд... когда он заходить под свой логин ему откриваетса default:
3.
Саня (17.11.2009 / 18:35)
Шота както странно сделано :Ы
4.
xass (17.11.2009 / 20:05)
3 мне ето непомагает
5.
ктулху (17.11.2009 / 21:03)
3, чёт я тоже подумал...
Что это такое? что делают с этим? это самая странная штука на свете
4, session_name (md5('SSS'));
Думаешь безопасности прибавит?
Ещё вопрос: а базы то тут причём? Тебе во первых надо саму базу писать, под свои нужды, и потом уже с базой просить помочь...
6.
xass (17.11.2009 / 21:40)
session_name (md5('SSS'));
ето просто так
а база уже создана.
нужно зделать авторизацию. ползавателa добавлает администратор)
7.
xass (17.11.2009 / 22:31)
id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`name` text NOT NULL,
`lastname` text NOT NULL,
`level` tinyint(2) DEFAULT '0',
PRIMARY KEY (`id`)
8.
xass (17.11.2009 / 23:03)
да и ето просто пример. так как код длиний.. зделал маленкий пример. главное что-би видно било что исползую swich
9.
Nu3oN (17.11.2009 / 23:18)
Короче обьясню я тебе все теоретически, т.к с телефона код писать влом! и так: при авторизации записываешь в сессию логин и пароль! потом обращаешься к таблице users занеся это в переменную типа $user = mysql_query("SELECT * FROM ... отбирая WHERE ^login^ = '".$_SESSION['login']."' (я заменил символ "тильда" на ^ т.к у меня нет этого символа на телефоне) и если есть пользователь с таким логином, то заносим в переменную, если нет то оставляем пустой! до этого сверив пароли!
10.
ramzes (17.11.2009 / 23:46)
if(isset($_SESSION['login']) AND preg_match('|^[a-z0-9\-]+$|i',$_SESSION['login'])){
$user = $sql->query("SELECT * FROM users WHERE login = '".htmlspecialchars($_SESSION['login'])."';")->fetch();
if($user['password']==md5($_SESSION['pass']){
define('AUTORIZE','1');
// user
}else{
unset($_SESSION['login']);
unset($_SESSION['pass']);
unset($user);
// guest
}
//guest
}
if(AUTORIZE==1){
echo'Hello, '.$user['login'];
}else{
echo'Hello, Guest';
}
ну где то вот так примерно..
11.
Артур (18.11.2009 / 01:11)
10, разьве в твою регулярку входят символы какие-то аля & < >? Можно логин и не фильтровать
12.
Артур (18.11.2009 / 01:13)
10, И зачем каждый раз сессию фильтровать/проверять регуляркой? Её же никто кроме тебя не изменит. Фильтровать надо перед присваиванием переменной сессии какого-нибудь значения.
13.
ramzes (18.11.2009 / 01:38)
Ниасилил монолог..
Сессию обычно из куков берут, а куки можно подделать.
Это пример, не надо цепляться к мелочам. регулярка просто пример проверки.
// можно и вообще ни чего не фильтровать. Одна такая быстрая сплошная дырка будет.
14.
xass (18.11.2009 / 11:47)
<?php
session_start();
require_once("connection.php");
if (isset($_POST['username'])) { $username = $_POST['username']; if ($username == '') { unset($username);} }
if (isset($_POST['password'])) { $password=$_POST['password']; if ($password =='') { unset($password);} }
if (empty($username) or empty($password))
{
exit ("Вы ввели не всю информацию, вернитесь назад и заполните все поля!");
}
$username = stripslashes($username);
$username = htmlspecialchars($username);
$password = stripslashes($password);
$password = htmlspecialchars($password);
$username = trim($username);
$password = trim($password);
15.
xass (18.11.2009 / 11:48)
$result = mysql_query("SELECT * FROM users WHERE username='$username'",$db);
$myrow = mysql_fetch_array($result);
if (empty($myrow['password']))
{
exit ("Извините, введённый вами username или пароль неверный.");
}
else {
if ($myrow['password']==$password) {
$_SESSION['username']=$myrow['username'];
$_SESSION['id']=$myrow['id'];
echo "Вы успешно вошли на сайт! <a href='...'>Главная страница</a>";
}
else {
exit ("Извините, введённый вами login или пароль неверный.");
}
}
?>
вот так вот..
16.
Артур (18.11.2009 / 16:54)
Рамзес, на примерах учатсо;)
17.
xass (18.11.2009 / 22:58)
Fuelen, нравится оффтопить?
тему можно закривать
18.
DmitryDick (19.11.2009 / 00:41)
13, не сессию, а ее идентификатор.
17, ога, везде суется)
19.
Б.В. (19.11.2009 / 10:08)
dont give me names, по моему тут рамзес имел ввиду, что данные для сесси перутся из кукисов, чтоб быть всегда авторизированым на сайте.
20.
xass (19.11.2009 / 10:26)
19.а мне ето не нужно
да и гость может проспатривать толко форму авторизации
21.
Б.В. (19.11.2009 / 10:29)
xass, так ты решил порблему, я так и не понял ))
22.
xass (19.11.2009 / 10:59)
как пароль в md5 hash передать?
в бд он в md5 .. )
23.
xass (19.11.2009 / 11:13)
$password= md5($_POST['password'])
24.
Б.В. (19.11.2009 / 11:14)
Ну правильно ты передал ) Я только не понимаю зачем тебе тот хэш? Чесно говоря не виже от него толку ))
25.
xass (19.11.2009 / 11:36)
так безопаснее хранить его в базе )
26.
Б.В. (19.11.2009 / 13:04)
Та ну... зато нельзя просматривать пароль админу.. Я ничо не храню в кеше, взломщик просто большепотратит времени на взлом, но все равно взломает, если скрипт уязвимый ))
27.
xass (19.11.2009 / 14:04)
причем тут взлом? если пароль длиний и в md5 hask тогда никто его невзломает
да и админу какое дело какой пароль у пользователа )
28.
DmitryDick (19.11.2009 / 15:05)
19, я и говорю про идентификатор, так это называется)
29.
ramzes (19.11.2009 / 15:57)
Не парьтесь
регулярку просто для примера написал.
И я не доверяю сессиям из куков. Некоторые арбузы не инициализируют сессию из куков (усвеб 6.0 на яве) из-за его сервера кривого. По этому принудительно беру из куков логин и пасс и пихаю в сессию. Ну и по привычке написал тут проверку на валидность
30.
DmitryDick (19.11.2009 / 17:10)
Дык можно включить автоматом вставление идентификатора в ссылки) тогда пох на куки)
31.
ramzes (19.11.2009 / 17:55)
Тогда без куков при каждом заходе надо будет авторизироваться по новой. А это уже геморой. Пользователи просто плюнут и пойдут на другой сайт. (да и не красиво это когда такая сопля висит за каждой ссылкой, не говоря уже о том что про красивые ссылки тогда можно забыть с таким хвостом (mod rewrite))
Куки же нужны что бы скажем на год авторизацию зарядить и спать спокойно.
Гм.. По моему мы уже в дебри полезли
автор явно не это спрашивал))
32.
DmitryDick (19.11.2009 / 18:04)
С чего ты взял, что по-новой?) идентификатор либо из гет-запроса берется, либо из печений.
// ну а автору будет полезно)
33.
ramzes (19.11.2009 / 18:15)
Ну если без куков совсем то каждый вход новая авторизация в ручную (если время жизни сессии прошло).
// ну вобщем да
я не мало часов убил пока сам раскопал как и что работает более менее понятно
34.
DmitryDick (19.11.2009 / 18:42)
Ну это да, только для этого тогда надо ему куки впаять с логин-паролем для авто-входа. Но я не об этом начинал говорить, а о том, что в либо в куках идентификатор сессии, либо в гет-запросе, так что если ты знаешь, что ничего некорректного не писал в сессии, то и не надо проверять.
35.
Б.В. (19.11.2009 / 22:07)
dont give me names, согласен с тобой со всем кроме одного )) Индификатор сессии это одно, а вот данные в сессии это другое, хз мб я не понял о чем вы говорили, но в индификаторе не хранятся никакие данные из создаваемых сессий, он указывает на нужные данные...
Полностью согласен стем, что если ты создал сессию, то дальше порверять её на правильность ввода данных совсем не стоит )) Но у мня была такая ситуация, что пришлось проверять. Если вы в сессию будет писать так допустим $_SESSIOB['auto']='ok'; типа авторизация пройдена, то пользователь будет находится на сайте до тех пор, пока не закроет браузер, а если это плохой пользователь? То его же надо как-то убрать с сайта? И ничто кроме проверки правильности сессий не поможет )
(вроде,хз, может и есть пути, это первое что мне тогда в голову стукнуло )
36.
ramzes (19.11.2009 / 22:55)
Вот этого я что то не понял.. Всмысле 'убрать с сайта'? Закрыть авторизацию?
занулить переменную $_SESSION['auto'] и все..
Я предпочитаю константу, не возможно подменить, доступна из любой функции, и задается каждый раз при запросе страниц сайта, не передаваясь от страницы к странице.
Удобно.
Хотя дело вкуса.
37.
Б.В. (20.11.2009 / 00:14)
Да там такая ситуация была, что нулить не выход,короче в редкий случаях,надо проверять правльность данных всессии,везде исключения есть ))
38.
ramzes (20.11.2009 / 00:37)
Я каждый раз проверяю
нагрузка минимальная, зато избавляет от неожиданностей.
Как известно один дурак столько проблем может создать что куча мудрецов не разгребет
лучше слегка подстраховаться, хотя у себя тоже избыточную проверку нашел, натолкнули на мысль таки
39.
DmitryDick (20.11.2009 / 00:50)
35, ну так идентификатор это как бы ключ к данным)
40.
ramzes (20.11.2009 / 00:56)
Или я в корне не верно понимаю принцип работы или ты.. Если сессиия умерла то нет данных, куки скажем на 10 лет, не думаешь же ты что сессия на сервере 10 лет хранится? Данные в сессию и берутся из куков. Кука[вар]=>сессия[вар]
разве не так?
Хотя я принудительно беру из куков в сессию. Ни когда не слетает авторизация.
41.
DmitryDick (20.11.2009 / 00:59)
Не так =)
42.
ramzes (20.11.2009 / 01:02)
Как же тогда???
43.
DmitryDick (20.11.2009 / 01:06)
Куки хранятся у пользователя, сессии - на сервере.
Сессии, вроде как, хранятся в файлах в папке tmp/ с именем sess_идентификатор.
Юзер заходит на сайт, если механизм сессии не получает идентификатор сессии (32 символа по умолчанию =)), то создает для него файл) и посылает ему куки с именем 'имя сессии' и значением - идентификатором. Либо, если идентификатор есть, открывает файл и извлекает переменные. Когда скрипт записывает в сессию переменные, то они записываются в этот файл.
44.
DmitryDick (20.11.2009 / 01:09)
Надеюсь, понятно объяснил =)
45.
ramzes (20.11.2009 / 01:17)
Это я знаю
префикс и папку можно изменить вроде
файл сессии не хранится 10 лет! Если пользователь 10 лет не заходил а тут взял и зашел (кука скажем еще жива), то какие тогда данные?
По моему сессии по умолчанию час хранятся. И если сессия не найдена то она создается автоматически и в нее пишутся данные из куков.
Другого варианта просто не вижу.. Не может быть что бы файл сессии хранился вечно. Сервер просто весь забит был бы файлами сессий.
46.
Б.В. (20.11.2009 / 07:00)
Разес, а тут смотр какой у тбя скрипт, если у тебя
$login='admin';
if(!isset($_SESSION['login']) && $_COOKIE['login']==$login){
$_SESSION['login']=$_COOKIE['login'];
}
То да, сессия задастся из кукисов, если у тебя сессия берется с другим каким-то путем, там с пост или гед данных, то кук роли играть не будут, с них данные в сессию не запишутся.
И время хранения сессий можна задать в конфиге и сессия хранится до тех пор, пока не закрыт браузер.
47.
DmitryDick (20.11.2009 / 08:06)
45, да я не про это хранение. Вобщем, я так делаю:
<?
$_SESSION['auth'] = isset($_SESSION['auth']) ? $_SESSION['auth'] : false;
if ( $_SESSION['auth'] ) {
Обновляем последнее время юзера итд
}
else if ( isset($_COOKIE['login'], $_COOKIE['pass']) {
Авторизуемся по кукам и, если все пральна, $_SESSION['auth'] = true;
Вот тут уже, если сессии нет, то она создается
}
?>
48.
Артур (20.11.2009 / 10:43)
Чё вы на меня накинулись? Я сделал замечание на счёт кода, как бы лучше было, а вы сразу типа я оффтоплю.
Смысл каждый раз проверять $_SESSION['login'] через регуляку, а потом ещё фильтрировать через хтмлспешлчарс? Регулярка бы не пропустила символы, какие эта функция заменяет.
Если не учитывать такое - появится очередной говнокодер. Короче, делайте как хотите, не моё дело.
49.
ramzes (20.11.2009 / 14:23)
Не шуми
ни кто не накинулся на тебя.
#46
if(!isset($_SESSION['login']) AND !isset($_SESSION['pass']) AND isset($_COOKIE['login']) AND isset($_COOKIE['pass'])){
$_SESSION['login'] = $_COOKIE['login'];
$_SESSION['pass'] = $_COOKIE['pass'];
}
if(provLog($_SESSION['login'])){ // та самая регулярка.
$user = $sql->query("SELECT * FROM users WHERE login = '".$_SESSION['login']."';")->fetch_assoc();
if($user['id']!='' AND $user['pass']==md5($_SESSION['pass'])){
define('AUT','1');
}}
вот примерно вот так делаю. Мелочи опустил некоторые но вобщем схема такая
50.
DmitryDick (20.11.2009 / 19:28)
ну я бы перебрал твой код так:
<?
if ( isset($_SESSION['login']) ) {
$user = $sql->query("SELECT * FROM users WHERE login = '".$_SESSION['login']."' limit 1;")->fetch_assoc();
if ( !empty($user) ) {
define('AUT',true);
}
}
else if ( isset($_COOKIE['login'], $_COOKIE['pass']) ) {
$login = обрабатываешь $_COOKIE['login'];
$pass = обрабатываешь $_COOKIE['pass'];
$user = $sql->query("SELECT * FROM users WHERE login = '".$login."' AND pass='".$pass."' limit 1;")->fetch_assoc();
if ( !empty($user) ) {
define('AUT',true);
$_SESSION['login'] = $login;
}
}
?>
В переменной $_SESSION['pass'] смысла не вижу)
51.
ramzes (20.11.2009 / 21:56)
Я понял о чем ты
для меня не вариант, у меня класс авторизации, там только один запрос, по этому мне проще из куков в сессию а из сессии в класс. Переменная пасс, нужна, для проверки валидности пароля. Не доверяю я сессиям. Их даже боты пауки перехватывают (на дцмс например такое наблюдал, видимо нет защиты от перехвата).
Вообще считай одинаковый код, только я по глупости каждый раз регулярку юзал, а надо было при присвоении значения $_SESSION['логин'] и все. Уже исправил
52.
DmitryDick (20.11.2009 / 22:27)
Не доверяю я сессиям
Их даже боты пауки перехватывают
видимо нет защиты от перехвата
ну так сделай и доверяй)))
да не, не одинаковый))
<?
if(!isset($_SESSION['login']) AND !isset($_SESSION['pass']) AND isset($_COOKIE['login']) AND isset($_COOKIE['pass'])){
$_SESSION['login'] = $_COOKIE['login'];
$_SESSION['pass'] = $_COOKIE['pass'];
}
if(provLog($_SESSION['login'])){.....
?>
а если нет ни сессии, ни кук?)
53.
xass (20.11.2009 / 22:55)
я не понел как coockie создать чтоби в нем хранился phpsessid
да и пример создание session в 14 и 15 посте )
где там что надо добавить?
54.
DmitryDick (20.11.2009 / 23:25)
Если вручную, то
setcookie(session_name(), session_id());
На счет параметра времени хз
55.
Б.В. (20.11.2009 / 23:32)
phpsessid сам в куки пишется, нах его самому запсывать Оо
56.
ramzes (21.11.2009 / 00:02)
<?php
setcookie('login',$login,time()+(3600*24*365);// кука на год.
setcookie('login','');// удалить куку
?>
еще такая фишка. Куки действуют в каталогах ниже того в котором задавались, но не в верхних каталогах. Либо указывать откуда действуют, Или задавай их в файле в корне сайта.
#52 а если нет то авторизация игнорируется. Пользователь остается гостем.
57.
xass (21.11.2009 / 00:43)
56, мне твои куски кода непомагает
58.
ramzes (21.11.2009 / 00:51)
Какие куски кода?))
это так cookie создается
извини других кусков в пхп пока для этого нет))
59.
xass (21.11.2009 / 00:56)
как создать куки с PHPSESSID?
да и как его от туда получить?
$_COOKIE[] так?
да и код авторизации на 2 странице
да и мне толко нужен в куки phpsessid )
60.
Б.В. (21.11.2009 / 01:00)
При создании сесси phpsessid сам вкуки записывается,ты это понимаеш? Если они выключены, то он "phpsessid" будет передаватся через константу SID. Корую надо писать в ссылках!
61.
xass (21.11.2009 / 01:24)
нет не понятно
как их включить через htaccess
да и что перед кодом надо писать? setcookie();?
да и зачем SID перед ссылками писать если он сам там автоматически появляется
62.
Б.В. (21.11.2009 / 01:29)
Ты ваще с дуба упал? Писать перед кодом них не надо,это тебене сессии,писать сид надо потому что если у тя в хтассесс нужных директив нету, то он *** у тебя сам там появится и не ПЕРЕД сылками,а в конец ссылок. Корочь манны те в руки,мы тут уже розжували как могли! Есть даже примеры!
63.
xass (21.11.2009 / 01:39)
закрито! обойдус без куки )
64.
ramzes (21.11.2009 / 03:21)
#63 во первых почитай
http://smartoff.net/php_function/index.php?function=Setcookie может так поймешь. Хотя уже правда все переживали..
И вот это
http://smartoff.net/php_function/index.php?function=session_id
что бы понять что ни каких 'phpsessid' нет, это просто имя сессий.
http://smartoff.net/php_function/index.php?function=session_name
сорри что на свой сайт ссылки даю, на пхп.су лезть лень, там тоже самое.
И до кучи про хитаччес почитай, ссылок под рукой нет. Вроде бы
http://htaccess.net.ru
URL:
https://visavi.net/topics/2952