2016-04-06 3 views
-1

Я новичок в PHP и на StackOverflow! Я пытался создать функцию входа в систему для моего приложения, но это does'nt похоже на работу ...Вход в систему PHP SHA1

function login($user, $password) 
{ 
    $db = new mysqli('127.0.0.1', 'root', 'raspberry', 'extranet'); 
    $db->set_charset('utf8'); 
    $token = ''; 
    if (isset($user) && isset($password) && !isset($_SESSION)) 
    { 
     $query = $db->prepare('SELECT * FROM users WHERE USERNAME = ? AND PASSWORD = ?'); 
     $query->bind_param($user, $password); 
     $res = $query->execute(); 
     if (mysqli_num_rows($res) != 0) 
     { 
      $_SESSION['user'] = $user; 

      $token = rand(85765, 650000); 
      $query = $db->prepare('INSERT INTO tokens VALUES(null, ?, ?);'); 
      $query->bind_param($user, $token); 
      $query->execute(); 

      $_SESSION['token'] = $token; 
     } else { 
      $_SESSION['token'] = 0; 
     } 

     return $_SESSION['token']; 
    } else if (isset($_SESSION['token']) && $_SESSION['token'] != 0 && isset($_SESSION['user'])) 
    { 
     $query = $db->prepare('SELECT * FROM tokens WHERE USERNAME = ? AND TOKEN = ?'); 
     $query->bind_param($_SESSION['user'], $_SESSION['token']); 
     $res = $query->execute(); 
     if (mysqli_num_rows != 0) 
     { 
      return true; 
     } else 
     { 
      return false; 
     } 
    } else 
    { 
     return false; 
    } 
} 

Можете ли вы сказать мне, что это проблема. ? thks! P-S: простите за мой английский уровень я просто французский

+0

Какое сообщение об ошибке и что вы уже пробовали? – Alex2php

+1

Do *** НЕ *** хэш-пароли, использующие SHA1, для этого принципиально нарушены. Использование: http://php.net/manual/en/ref.password.php – Sammitch

+0

Я также предлагаю не отправлять пароли ... :) ('mysqli (...)') – urban

ответ

0
$query = $db->prepare('SELECT * FROM users WHERE USERNAME = ? AND PASSWORD = ?'); 
$query->bind_param($user, $password); 

Вы хранения паролей в открытом здесь. Посмотрите на PHP password hashing features.

$token = rand(85765, 650000);

Я уверен, что вся ваша система знака не является необходимым, но даже если бы это не было, don't use rand().

+0

Спасибо! Я пытался найти информацию о токенах сессий, но это довольно сложно! Итак, в этом случае мы используем токены? – lportemo

+0

PHP делает это за вас. Если вы не думаете о долгосрочной аутентификации. Проверьте [Gatekeeper] (https://github.com/psecio/gatekeeper). –

Смежные вопросы