2014-01-10 1 views
0

절차적인 PHP 프로그래밍에서 작업 할 때 사용자 세션이 만들어지고 저장되는 로그인 페이지가 생겼습니다. 그런 다음 모든 페이지에서 사용자의 이름을 표시하고 필요한 정보를 검색했습니다.사용자 클래스를 어떻게 디자인하고 사용해야합니까?

하지만 저는 무기력합니다. 어떻게 목표 프로그래밍에서이 목표를 달성 할 수 있습니까?

그래서, 절차 (login.php) :

if ($_POST['password'] != '' && $_POST['username'] != '') { 
    // check if password&username combination exists in database etc. 

    $_SESSION['user_id'] = $user_id; 
    $_SESSION['username'] = $username; 

} 

나는 그것이 OOP에서 다음과 같이 할 것입니다 가정 : 나는 세션을 만들려면 어떻게해야합니까 : 여기

// include user class 

if ($_POST['password'] != '' && $_POST['username'] != '') { 
    // check if password&username combination exists in database etc. 

$user = new User(); 
$user->id = $userId; 
$user->username = $username; 

을하지만 문제인가? 그리고이 객체는이 "login.php"페이지 외부에 존재하지 않을 것입니다. 왜냐하면 내가 거기 생성하기 때문입니다. 이 정보를 어디서나 액세스 할 수있게하려면 어떻게해야합니까?

그리고 사용자 클래스에 쿼리를 넣지 않고 특수 클래스 (PDO라고 가정 해 봅시다)를 사용하여 데이터베이스에서 정보를 얻으려면 어떻게해야합니까?

난 그냥 다른 페이지에 다시 액세스 할 때 당신이

// include user class 
session_start(); 

if ($_POST['password'] != '' && $_POST['username'] != '') { 
    // check if password&username combination exists in database etc. 

$user = new User(); 
$user->id = $userId; 
$user->username = $username; 

$_SESSION['user_obj'] = serialize($user); 

그리고 거의가 시도 구조

+0

쉬운 것입니다, 나는 그 제안 사용자 클래스 초기화 (모든 페이지에서 코드를 다시 작성할 필요가 없음)와 같이 필요한 모든 것을 설정하는 "마스터 파일"을 자동으로 추가하여 모든 스크립트 실행을 시작합니다. 아파치 지시문을 사용할 수 있다면 "auto_prepend_file"php 플래그를 사용하고, 그렇지 않으면 모든 페이지 맨 위에 require/include를 사용하십시오. – Felthragar

답변

0

를 이해할 수없는, 대단히 감사합니다

// include user class 
session_start(); 

$user = new User(); 
if (isset($_SESSION['user_obj']) { 
    $user = unserialize($_SESSION['user_obj']; 
} 
1

줄을 따라 뭔가를 할 수 있습니다.

class User{ 

private $id; 
private $username; 

    function __construct($userId, $username) { 
     $this->$id = $userId; 
     $this->$username = $username; 
    } 

} 

if ($_POST['password'] != '' && $_POST['username'] != '') { 
    // check if password&username combination exists in database etc. 
    //...... 
    //Store your session 
    $_SESSION['user_id'] = $user_id; 
    $_SESSION['username'] = $username; 
    //Create user instance 
    $user = new User($user_id, $username); 
} 

사용자 세션에 데이터 액세스 계층을 넣을 수도 있습니다. 그러면 ID 세션 저장에 대해 걱정할 필요가 있습니다.

User.php :

class User{ 

private $id; 
private $username, $first_name, $last_name; 

    function __construct($userId) { 
     $this->$id = $userId; 
     //get user data from db using $id 
     $this->$username = $row['username']; 
     $this->$first_name = $row['first_name']; 
     $this->$last_name = $row['last_name']; 
    } 

} 

Login.php : 당신은을 사용하여 사용자 인스턴스를 생성 할

if ($_POST['password'] != '' && $_POST['username'] != '') { 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $user_id = get_userId($username, $password); 
    $_SESSION['user_id'] = $user_id; 
} 

:

function get_userId($username, $password) 
// check if password&username combination exists in database etc. 
//then return Id 
//...... 
return $userId 
} 

그런 다음 다음과 같은 기능을 사용 이 같은 ID :

난 단지 당신이 클래스를 사용하고 모든 OOP 방법을 결정할 것을 말할 수
0

은 먼저 내 모든 experiance에 들어 documentation

공식 사용해야합니다. 몇 가지 구조와 구조를 제공하는 많은 모델과 시합이 있지만 개인적인 선택입니다.

하지만 귀하의 경우에는 정보를 확인하고 저장하는 규정 클래스를 사용하여 귀하에게 제안 할 수 있습니다.이 많은 다른 파일이 큰 웹 사이트의 일부가 될 것입니다 경우이 클래스

class User { 
    private $id = null; 
    private $username = null; 
    private $isLoggedIn = false; 
    public function __construct() { 
     if (isset($_SESSION['userData']) && !empty($_SESSION['userData'])) { 
      // I want to think that you have more complex check for user session 
      $this->id = $_SESSION['userData']['userId']; 
      $this->username = $_SESSION['userData']['username']; 
      $this->isLoggedIn = true; 
     } 
    } 

    public function auth() { 
     $_SESSION['userData'] = array() 
     $result = false; 
     // Here can be an password check 
     if ($this->id && $this->username) { 
      $_SESSION['userData']['userId'] = $this->id; 
      $_SESSION['userData']['username'] = $this->username ; 
      $this->isLoggedIn = true; 
      $result = true; 
     } 
     return $result; 
    } 
    public function isLoggedIn() { 
     return $this->isLoggedIn; 
    } 

    public function userId($id = null) { 
     if ($id != null) { 
      $this->id = $id; 
     } 
     return $this->id; 
    } 

    public function userName($name = null) { 
     if ($name != null) { 
      $this->name = $name; 
     } 
     return $this->name; 
    } 

} 

그리고 사용이 짧고 아래의 답변에 추가

// include user class 
session_start(); 
$user = new User(); 
if ($user->isLoggedIn()) { 
    // user is Logged In 
} elseif ($_POST['password'] != '' && $_POST['username'] != '') { 
    // check if password&username combination exists in database etc. 

    $user->userId($userId); 
    $user->userName($username); 
    $user->auth(); 
} else { 
    echo 'Auth failed'; 
    die(); 
} 
echo 'Hello, ' . $user->userName(); 
관련 문제