Здравствуйте форумчане. Возник еще один вопрос по сессиям. Хочу сделать авторизацию с помощью сессий, но не совсем разобрался в некоторых нюансах. В общем задача в следующем: Есть сайт с неким набором страниц Page1.php, Page2.php, .... PageN.php. Задача довольно банальная. Для каждого пользователя эти страницы формируются свои, в зависимости от тех данных, которые он вводил ранее. С моментом регистрации я разобрался. В базе есть таблица куда записываются данные пользователя там логин, пароль, емаил и.т.д. Соответственно у каждого пользователя в таблице есть свой уникальный UserID. Для того что бы отобразить страничку непосредственно соответствующую конкретному пользователю, я формирую адрес страницы в следующем виде header(location: PageX.php?UserID=123). Далее я в самом скрипте PageX.php через $_GET считываю UserID и через него набираю из базы информацию, соответсвующую данному пользователю и формирую соответствующую страничку. Тут сразу возникает очевидная проблема: Любой пользователь вводит адресс http://Мойсайт/PageX.php?UserID=123 и попадает на страницу того пользователя UserID которого он ввел. Вообщем надо делать авторизацию. Делаю страницу login.html и скрипт для нее login.php. Из первой во вторую передаю логин и пароль. Проверяю правильность и если данные правильны, то создаю некую переменную в сессии и записываю в нее некое значение: $_SESSION['checklogin'] = 'done'. А далее каждый скрипт PageX.php начинается с проверки существует ли $_SESSION['checklogin']. Если существует то формирую страницу а если нет то посылаю пользователя на login.html. Метод тоже не подходит т.к. заполнить переменную сессии я могу входом на свой аккаунт, а потом менять просто UserID и просматривать чужие страницы. Далее модифицирую авторизацию следующим образом: Создаю в таблице плльзователей дополнительное поле SessionCode. При авторизации генерирую случайную строку типа "bh2hdah8de" и записываю ее и в сессию и в таблицу базы данных в поле SessionCode. А далее в КАЖДОЙ странице PageX.php сравниваю этот код в сессии и в базе. И формирую результирующую страницу если эти коды совпадают, в противном случае посылаю пользователя на login.html Последний вариант с рабочей точки зрения вроде правильный. Но мне кажется что это все делается как-то проще и красивее. Подскажите пожалуйста как это все реализуется. Код особо не нужен, желательно просто на пальцах объяснить логику. Уверен что по этой теме уже сформированы классические решения т.к. это используется в огромном количестве сайтов. Заранее спасибо.
я конечно не профи, но ведь можно сделать так, что бы в строке не было USER_ID b вообще небыло ничего кроме http://твойсайт/страница1.php, а если дописать всякую ню, типа USER_ID=1134, то ничего происодить не будет. если так авторизировать пользователя? PHP: <? $auth_login = $_POST["login"]; $auth_pass = $_POST["pass"]; session_register("auth_login"); session_register("auth_pass"); ?> а затем делать так PHP: <? session_start(); $res = mysql_query("SELECT id as id FROM users WHERE login = '".$_SESSION["auth_login"]."'"); $id = mysql_fetch_assoc($result); if ($id = $(значение нужное для генерации страницы)) {генерируешь страницу;} else{шлешь нахер;} mysql_free_result($res); ?> Чесно, не представляю как поменять id в таком случае...
т.е. основной причиной является то, что скоро эта функция может быть снесена из пхп в принципе и это Note: It is currently impossible to register resource variables in a session. For example, you cannot create a connection to a database and store the connection id as a session variable and expect the connection to still be valid the next time the session is restored. PHP functions that return a resource are identified by having a return type of resource in their function definition. A list of functions that return resources are available in the resource types appendix. If $_SESSION (or $HTTP_SESSION_VARS for PHP 4.0.6 or less) is used, assign values to $_SESSION. For example: $_SESSION['var'] = 'ABC'; ? а выполнить тоже самое можно так? PHP: <? $_SESSION["auth_login"] = $_GET["login"]; ?>
спасибо, буду знать. Соответственно разлогинить, при таком раскладе можно так: PHP: <?unset($_SESSION["auth_login"]);?> ?
таки с горя обнаружил Sql инъекцию http://kalex.su/?mode=8&thred_id=7'+union+select+1,database(),3,USER(),5,6'
Чесно говоря, пусть ломают, потом буду заниматься прочтением логов и искать что перегрызли Бэкап льёться каждые пол часа, сохраняется последние 100
Я правильно все понял? В момент авторизации, если логин + пароль верны, то я записываю в сессию значение UserID. А далее переходя на любую страницу PageX.php, я в начале скрипта, проверяю существует ли соответствующая переменна сессии. Если существует, то считываю ее значение и через него работаю с базой и формирую страницу. Если нет то посылаю пользователя на login.html. При этом мне становится не нужно передавать UserID через GET? Если это все верно то возникает еще 2 вопроса: 1) Если я каким-либо образом узнаю UserID другого пользователя и его session_ID, то я могу получить доступ к его данным при таком типе авторизации? 2) Как сделать так, что бы login.html отправляла логин и пароль по протоколу https?