БЛОГ PHP ПРОГРАММИСТА
Пользователю будет приятно видеть сообщение вида «Рады видеть снова, -оно будет способствовать возвращению пользователей на сайт. Если вы скажете сайту свое имя, оно будет использовано в приветствии.
Чтобы продемонстрировать один из способов создания такого сообщения, мы напишем сценарий, хранящий данные в Cookies и отображающий их, если Cookie доступно:
if (isset($_COOKIE["stored_user_name"])) < $user = $_COOKIE["stored_user_name"]; print "Рады вас видеть снова, $user!"; > else < ?>?>
Доступ и хранение Cookies — это два отдельных механизма. Вы можете читать Cookies, отправляемые клиентом через массив $_СООК1Е. Он работает так же, как и массивы $_POST и $_GET.
Для установки Cookies нужно использовать функцию setcookie(), которой нужно передать три основных параметра:
• Имя Cookie — этот сценарий использует stored_user_name.
• Значение Cookie.
• Срок действия Cookie в формате Unix timestamp. Этот скрипт использует time()+604800-7 дней с момента установки Cookies.
Также вы можете передать три дополнительных параметра:
• Путь к местам сайта, где Cookie будет действовать, — работает как каталог, например, вы хотите, чтобы Cookies действовали только для каталога /content/ вашего сайта, используйте /content/ в качестве значения этого параметра. Если вы хотите, чтобы Cookies действовали по всему сайту, используйте /.
• Домен, для которого действуют Cookies, — предположим, что у вас есть узлы www . example . com и sales . example . com, и вы хотите, чтобы Cookies были действительны для обоих узлов, — ус-тановите . example. com в качестве значения этого параметра.
• Если последний параметр равен 1, то браузер должен передавать Cookies только по защищенному соединению (HTTPS).
Что может быть не так?
Рассмотрим несколько проблем, часто встречающихся при получении Cookies:
• Вы отправляете данные в браузер пользователя перед вызовом setcookie (). Запрос на установку Cookies — это HTTP-заголовок сервера, поэтому ваш сценарий ничего не должен выводить до вызова setcookies (). Если у вас включены предупреждения, РНР сообщит вам об ошибке. Довольно часто программисты сталкиваются с проблемой наличия пробельных символов до • Браузер пользователя не принимает Cookies — если пользователь отключил прием Cookies, вы об этом даже не узнаете. Максимум, что вы можете сделать, — это использовать is set () для проверки существования элементов массива $_С00КIЕ [ ]. Иногда сам браузер может отвергать Cookies, причиной этому может быть неправильный домен.
• Кто-либо пытается передать неверные параметры — Cookies могут быть легко сфабрикованы, не доверяйте получаемым из Cookies значениям.
• Вы пытаетесь сохранить массив в Cookies — перед сохранением массива в Cookies его нужно сериализировать
Posted on Nov. 10th, 2010 at 12:34 pm | Link | Оставить след | Share | Flag
Как вывести имя авторизованного пользователя?
Только Вы бы почитали про sql-инъекции, а то так пихать в запрос все что не попадя — все равно что тянуть все в рот, что на дороге нашел.
на счет $user[‘name’]; не понятно. у меня он нигде не хранится, я вам скинул весь код.
как его записать можно?
BadassRolf: вместо name — любое имя поля которое хотите чтобы выводилось в качестве имени, наверно тогда $user[«login»], если более подходящего нет ничего:)
Ну так правильно! Причем тут кнопка. Поле называется login!
измените на это:
if (isset($_POST[‘login’]))
Exploding: на странице с формой находится экшн. при вводе логина и пароля проверяется событие на нажие кнопки у которой имя login_u. после этого идет сверение и устанавливается сессия.
если поставить как вы сказали, тогда не работает
BadassRolf: И хотя бы привести пример ошибки, которую выдает интерпретатор, а не просто «не работает».
Контроль ошибок включается: error_reporting(-1);
Уффф. вот так 100% должно работать.
[«login»]=> string(5) — это по вашему что означает)))))
[«login_u»]=> string(0) — и вот это))
if (isset($_POST['login'])) < $login_true = mysqli_query($connections, "SELECT * FROM `users` WHERE login='".$_POST['login']."' AND password = MD5('".$_POST['password']."')"); if ($login_true) < $user = mysql_fetch_assoc($login_true); $_SESSION['login_user'] = $login_true; $_SESSION['user_name'] = $user['name']; //или где там имя храниться >else echo "Не правильно"; > echo "Здрасте, ".$_SESSION["user_name"];
if (isset($_POST['login_u'])) < $login_true = mysqli_query($connections, " SELECT * FROM `users` WHERE login='".$_POST['login']."' AND password = MD5('".$_POST['password']."'); "); if ($login_true) < $count = mysqli_num_rows($login_true); if ($count >0) < $_SESSION['login_user'] = $login_true; >else < echo "Не правильно"; >> $_SESSION['user_name'] = $_POST['login']; >
BadassRolf: Ну. скрипя и отворачивая голову, учитывая что это на локалке для себя. )))
Только определение $_SESSION[‘user_name’] = $_POST[‘login’]; хотя бы в блок с проверкой запихните, а то мало ли какой пост_логин прийдет.
if (isset($_POST[‘login_u’])) $login_true = mysqli_query($connections, »
SELECT * FROM `users` WHERE login='».$_POST[‘login’].»‘ AND password = MD5(‘».$_POST[‘password’].»‘);
«);
if ($login_true) $count = mysqli_num_rows($login_true);
if ($count > 0) $_SESSION[‘login_user’] = $login_true;
$_SESSION[‘user_name’] = $_POST[‘login’];
>else echo «Не правильно»;
>
>
Exploding: я от силы php изучаю неделю. практикуюсь второй день) вот все и криво и как попало. с повышением знаний буду исправлять код)
Но я бы разобрался! Т.к. фактически вы вроде бы и сверились с БД но как-то хреново сверились))) Почему логин не из записи БД берется а из поста?)))) Фен-шуй за это покарает колючей плетью))
BadassRolf: Обязательно исправьте, т.к. этот вариант крайне не подходящий для постоянной работы. Заглушка, так можно сказать про него:)
get_current_user
Результатом выполнения данного примера будет что-то подобное:
Текущий владелец скрипта: SYSTEM
Смотрите также
- getmyuid() — Получение UID владельца скрипта PHP
- getmygid() — Получить GID владельца скрипта PHP
- getmypid() — Получение ID процесса PHP
- getmyinode() — Получает значение inode текущего скрипта
- getlastmod() — Получает время последней модификации страницы
User Contributed Notes 7 notes
to get the username of the process owner (rather than the file owner), you can use:
$processUser = posix_getpwuid ( posix_geteuid ());
print $processUser [ ‘name’ ];
?>
On Centos, the Red Hat linux clone, this instruction gives the file’s OWNER (the first parameter in instruction ‘chown’). It does not reveal the file’s GROUP.
get_current_user() does NOT reveal the current process’ user’s identity.
See: posix_getuid() — Return the real user ID of the current process
The information returned by get_current_user() seems to depend on the platform.
Using PHP 5.1.1 running as CGI with IIS 5.0 on Windows NT, get_current_user() returns the owner of the process running the script, *not* the owner of the script itself.
It’s easy to test — create a file containing:
echo get_current_user ();
?>
Then access it through the browser. I get: IUSR_MACHINE, the Internet Guest Account on Windows, which is certainly not the owner of the script.
Further testing of behaviour on Windows vs Linux.
On Linux this function is indeed returning the owner of the script. If you want to know the username PHP is running as you can use POSIX functions (or shell_exec with ‘whoami’).
On Windows this function is returning the username PHP is running as. Both for IIS (IUSR) and Apache (SYSTEM — which comes from the fact Apache is a service on Windows).
The behaviour on Windows is actually useful given that POSIX functions aren’t available. If you need to find the owner of the script on Windows perhaps the best way is to shell_exec to use dir /Q, and parse that.
Since this only returns the file owner and not the actual user running the script, an alternative in Linux is:
$current_user = trim ( shell_exec ( ‘whoami’ ));
?>
If you want to get the name of the user who executes the current PHP script, you can use
$username = getenv ( ‘USERNAME’ ) ?: getenv ( ‘USER’ );
echo $username ; // e.g. root or www-data
?>
If you have userdir enabled, get_current_user() returns the username of the user hosting the public_html. For example, http://example.com/~bobevans/somescript.php will return bobevans when calling get_current_user().
- Опции PHP/информационные функции
- assert_options
- assert
- cli_get_process_title
- cli_set_process_title
- dl
- extension_loaded
- gc_collect_cycles
- gc_disable
- gc_enable
- gc_enabled
- gc_mem_caches
- gc_status
- get_cfg_var
- get_current_user
- get_defined_constants
- get_extension_funcs
- get_include_path
- get_included_files
- get_loaded_extensions
- get_required_files
- get_resources
- getenv
- getlastmod
- getmygid
- getmyinode
- getmypid
- getmyuid
- getopt
- getrusage
- ini_alter
- ini_get_all
- ini_get
- ini_parse_quantity
- ini_restore
- ini_set
- memory_get_peak_usage
- memory_get_usage
- memory_reset_peak_usage
- php_ini_loaded_file
- php_ini_scanned_files
- php_sapi_name
- php_uname
- phpcredits
- phpinfo
- phpversion
- putenv
- set_include_path
- set_time_limit
- sys_get_temp_dir
- version_compare
- zend_thread_id
- zend_version
- get_magic_quotes_gpc
- get_magic_quotes_runtime
- restore_include_path
Как выводить имя пользователя по id, на главную страницу в админке?
Доброе утро.
Сохраните в сессии или cookies имя пользователя и подставляйте значение в нужном месте.p.s. Запросы к базе уязвимы, надо исправить, иначе будут проблемы. Зачем в сессию записывать пароль?
В сессию сохраните id, а потом доставайте sql запросом. Хотя зачем вам id, если у вас email (который должен быть уникальным). По нему и достаньте.
Виталий Хоменко, справедливости ради, нельзя разрешать просто так менять email. Хочет поменять, пусть меняет, но перед этим отправляете письмо на почту, чтобы он подтвердил ее реальность, а уже в методе подтверждения авторизуете его заново с новыми аутентификационными данными.
mad_maximus, можно или нельзя менять почту это уже другой вопрос, другая зона ответственности, и с тех. частью никак не связана.
ID пользователя всегда существует, всегда уникален. Почта же может меняться, если этого потребует бизнес-сценарий, почта может даже отсутствовать или почтовых адресов может быть множество. Хранение email в сессии эту выстрел себе в ногу при определенных условиях.
Вы можете со мной не соглашаться, ваше право. Просто прикиньте все возможные ситуации и проблемы, которые могут возникнуть в обоих вариантах.
Виталий Хоменко, да, разумеется, я сам всегда использую id, это удобнее и надежнее, как вы сказали. Не знаю, зачем я во второй части своего ответа посоветовал использовать email, просто как вариант, а не золотое решение.