How Can I get a Session Id or username in php?
and When users login I set their session as userlogin, but it won’t show their username.
3 Answers 3
And to retrieve it on another page do:
Some more information about how to create a loginform.. You say you tried setting $_SESSION[‘user’] but that this didn’t work.
So just make sure that you actually did a session_start(); before that. If you did, everything should work. Unless you assign an empty variable to the session. So doublecheck that the variable you assign actually contains a value. Like:
In the tutorial you linked me to they are doing:
$_SESSION[user]=$_GET[userlogin];
This means they are assigning a value they got from their loginform that they create here:
function loginform() < print "please enter your login information to proceed with our site"; print ("username password
"); print ""; print "register now!
"; >
There you see . But there is no tag around this form.. So this won’t properly post. So what you should do is the following:
This form will post the form back to index.php with userlogin and password as $_POST variables.
In your index.php you can then do:
I can’t make it much clearer without writing the entire code for you. So I hope this helps you.
Как вывести имя авторизованного пользователя?
Только Вы бы почитали про 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: Обязательно исправьте, т.к. этот вариант крайне не подходящий для постоянной работы. Заглушка, так можно сказать про него:)
Как получить имя залогиненого пользователя?
Подскажите, пожалуйста, как получить имя залогиненого пользователя и прочую информацию пользователя? Буду рад парочке простых примеров, спасибо.
session_start(); require_once 'classes/Auth.class.php'; ?> Your are welcome!
username = $username; $this->connectDb($this->db_name, $this->db_user, $this->db_pass, $this->db_host); > public function __destruct() < $this->db = null; > public static function isAuthorized() < if (!empty($_SESSION["user_id"])) < return (bool) $_SESSION["user_id"]; >return false; > public function passwordHash($password, $salt = null, $iterations = 10) < $salt || $salt = uniqid(); $hash = md5(md5($password . md5(sha1($salt)))); for ($i = 0; $i < $iterations; ++$i) < $hash = md5(md5(sha1($hash))); >return array('hash' => $hash, 'salt' => $salt); > public function getSalt($username) < $query = "select salt from users where username = :username limit 1"; $sth = $this->db->prepare($query); $sth->execute( array( ":username" => $username ) ); $row = $sth->fetch(); if (!$row) < return false; >return $row["salt"]; > public function authorize($username, $password, $remember=false) < $query = "select id, username from users where username = :username and password = :password limit 1"; $sth = $this->db->prepare($query); $salt = $this->getSalt($username); if (!$salt) < return false; >$hashes = $this->passwordHash($password, $salt); $sth->execute( array( ":username" => $username, ":password" => $hashes['hash'], ) ); $this->user = $sth->fetch(); if (!$this->user) < $this->is_authorized = false; > else < $this->is_authorized = true; $this->user_id = $this->user['id']; $this->saveSession($remember); > return $this->is_authorized; > public function logout() < if (!empty($_SESSION["user_id"])) < unset($_SESSION["user_id"]); >> public function saveSession($remember = false, $http_only = true, $days = 7) < $_SESSION["user_id"] = $this->user_id; if ($remember) < // Save session id in cookies $sid = session_id(); $expire = time() + $days * 24 * 3600; $domain = ""; // default domain $secure = false; $path = "/"; $cookie = setcookie("sid", $sid, $expire, $path, $domain, $secure, $http_only); >> public function create($username, $password) < $user_exists = $this->getSalt($username); if ($user_exists) < throw new \Exception("User exists: " . $username, 1); >$query = "insert into users (username, password, salt) values (:username, :password, :salt)"; $hashes = $this->passwordHash($password); $sth = $this->db->prepare($query); try < $this->db->beginTransaction(); $result = $sth->execute( array( ':username' => $username, ':password' => $hashes['hash'], ':salt' => $hashes['salt'], ) ); $this->db->commit(); > catch (\PDOException $e) < $this->db->rollback(); echo "Database error: " . $e->getMessage(); die(); > if (!$result) < $info = $sth->errorInfo(); printf("Database error %d %s", $info[1], $info[2]); die(); > return $result; > public function connectdb($db_name, $db_user, $db_pass, $db_host = "localhost") < try < $this->db = new \pdo("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass); > catch (\pdoexception $e) < echo "database error: " . $e->getmessage(); die(); > $this->db->query('set names utf8'); return $this; > > Форум PHP программистов ► PHP практикум ► PHP для начинающих
Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 43234
На форуме:
Карма:
Здравствуйте! Собственно, мой вопрос заключён в названии темы.
Как вывести имя пользователя на страницу? Тестирую в Денвере.
Пробую вставить этот код:
Профиль
Группа: ★ЛжеЭксперт★
Сообщений: 2642
Пользователь №: 37963
На форуме:
Карма: 29
Сообщений: 1122
Пользователь №: 37872
На форуме:
Карма: 43
Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 43234
На форуме:
Карма:
Я только начинаю учить PHP+MySQL. В качестве наглядного пособия для себя скачал готовый архив с файлами для регистрации и авторизации. Всё прекрасно работает.
Вот код php-файла, в который я хочу добавить код вывода имени пользователя на страницу, но почему-то не получается.
/**
* Скрипт распределения ресурсов
* Проверяем права на чтение данных,
* только для зарегистрированных пользователей
*/
//Проверяем зашел ли пользователь
if($user === false)
echo 'Доступ закрыт, Вы не вошли в систему!
'."\n";
>
if($user === true)
echo 'Поздравляю, Вы вошли в систему!
'."\n";
echo '.BEZ_HOST.'?mode=auth&exit=true"> ';
//Вот сюда я хочу вставить код вывода имени пользователя на страницу
echo $_SESSION["email"];
>
?>
Это сообщение отредактировал Comer — 7.08.2016 — 20:22
Профиль
Группа: ★ЛжеЭксперт★
Сообщений: 2642
Пользователь №: 37963
На форуме:
Карма: 29
Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 43234
На форуме:
Карма:
Профиль
Группа: ★ЛжеЭксперт★
Сообщений: 2642
Пользователь №: 37963
На форуме:
Карма: 29
Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 43234
На форуме:
Карма:
//Я хочу вставить этот код
echo $_SESSION["email"];
Профиль
Группа: ★ЛжеЭксперт★
Сообщений: 2642
Пользователь №: 37963
На форуме:
Карма: 29
Профиль
Группа: Пользователь
Сообщений: 22
Пользователь №: 43234
На форуме:
Карма:
Цитата (Медведь @ 7.08.2016 — 20:22) 😆 всё.. я под стулом ))
/**
* Обработчик формы авторизации
* Авторизация пользователя
*/
//Выход из авторизации
if(isset($_GET['exit']) == true)
//Уничтожаем сессию
session_destroy();
//Делаем редирект
header('Location:'. BEZ_HOST .'?mode=auth');
exit;
>
//Если нажата кнопка то обрабатываем данные
if(isset($_POST['submit']))
//Проверяем на пустоту
if(empty($_POST['email']))
$err[] = 'Не введен Логин';
if(empty($_POST['pass']))
$err[] = 'Не введен Пароль';
//Проверяем email
if(emailValid($_POST['email']) === false)
$err[] = 'Не корректный E-mail';
//Проверяем наличие ошибок и выводим пользователю
if(count($err) > 0)
echo showErrorMessage($err);
else
/*Создаем запрос на выборку из базы
данных для проверки подлиности пользователя*/
$sql = 'SELECT *
FROM `'. BEZ_DBPREFIX .'reg`
WHERE `login` = :email
AND `status` = 1';
//Подготавливаем PDO выражение для SQL запроса
$stmt = $db->prepare($sql);
$stmt->bindValue(':email', $_POST['email'], PDO::PARAM_STR);
$stmt->execute();
//Получаем данные SQL запроса
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
//Если логин совподает, проверяем пароль
if(count($rows) > 0)
//Получаем данные из таблицы
if(md5(md5($_POST['pass']).$rows[0]['salt']) == $rows[0]['pass'])
$_SESSION['user'] = true;
//Сбрасываем параметры
header('Location:'. BEZ_HOST .'?mode=auth');
exit;
>
else
echo showErrorMessage('Неверный пароль!');
>else
echo showErrorMessage('Логин '. $_POST['email'] .' не найден!');
>
>
>
?>
Это сообщение отредактировал Comer — 7.08.2016 — 20:32