예제를 통해 Codeigniter에서 세션을 설정하는 방법

CodeIgniter 세션 관리

이전에 데스크톱 애플리케이션을 개발한 적이 있다면 전역 변수를 정의하고 값을 할당하고 애플리케이션의 수명 주기 동안 이를 하나(1) 이상 열고 닫는 데 사용할 수 있으며 각 요청은 다음에 액세스할 수 있다는 것을 알고 있을 것입니다. 전역 변수.

즉, 애플리케이션의 상태가 유지됩니다. 즉, 로그인할 때 회사 이름을 전역 변수로 설정하면 로그인 양식을 닫은 후에도 회사 이름 상태가 유지됩니다.

HTTP는 방금 설명한 위의 시나리오와 약간 다르게 작동합니다. 무국적자입니다. 즉, 한 요청에서 수행한 작업이 다음 요청에서는 지속되지 않는다는 의미입니다. 티

o 이 문제를 해결하세요. PHP에는 두 가지 솔루션이 있습니다. 우리는 사용자의 컴퓨터에 있는 작은 파일인 쿠키로 작업하거나 쿠키와 유사하지만 대신 서버에 저장되고 쿠키보다 더 큰 용량을 갖는 세션으로 작업할 수 있습니다.

세션은 언제 사용하나요?

세션은 일반적으로 페이지 간 사용자 활동을 알고 싶을 때 유용합니다. 예를 들어 웹사이트에 보호 구역이 있다고 가정해 보겠습니다. 사용자는 각 페이지에서 로그인할 필요가 없습니다. 사용자가 한 번 로그인하고 해당 정보를 저장하도록 할 수 있습니다.tails 세션 변수에서 추가 요청 시 동일한 데이터를 재사용합니다. 다른 사용 사례에는 쇼핑 시스템에서 작업할 때와 사용자가 장바구니에 항목을 추가해야 하는 경우가 포함됩니다.

또는 CodeIgniter는 세션을 사용하여 다음 요청 시 데이터를 한 번만 사용할 수 있도록 합니다. 이는 데이터베이스 레코드를 편집 및 업데이트할 수 있고 사용자가 다른 페이지로 리디렉션될 때 사용자에게 일부 피드백을 반환하려는 경우 유용합니다.

CI 세션을 사용하여 다른 페이지로 플래시 메시지 보내기

이 섹션에서는 세션 라이브러리를 사용하여 플래시 메시지를 다른 페이지로 보내는 방법을 배웁니다. CodeIgniter

SessionController라는 새 파일을 생성합니다.

application/controllers/SessionController.php

팔로우 추가wing 암호

<?php defined('BASEPATH') OR exit('No direct script access allowed');

class SessionController extends CI_Controller {

    public function __construct() {
        parent:: __construct();

        $this->load->helper('url');
        $this->load->library('session');
    }

    public function index() {
        
        $this->load->view('sessions/index');
    }
    
    public function flash_message(){
        $this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages');
        redirect(base_url('flash_index'));
    }
}

이리,

  • class SessionController는 CI_Controller를 확장합니다. {...}는 SessionController 클래스를 정의하고 상위 컨트롤러 클래스를 확장합니다.
  • public function __construct() {…}는 상위 클래스를 초기화하고 URL 도우미 및 세션 라이브러리를 로드하는 생성자 메서드를 정의합니다.
  • public function index() {…}는 세션 인덱스 뷰를 로드하는 세션 인덱스 메서드를 정의합니다.
  • 공개 함수 flash_message(){…}는 플래시 데이터를 설정한 다음 flash_index 경로로 리디렉션하는 플래시 메시지 방법을 정의합니다.

이제 세션 데이터의 값을 표시할 뷰를 만들어 보겠습니다.

애플리케이션/뷰에서 새 디렉터리 세션을 생성합니다.

application/views/sessions에 새 파일 index.php를 만듭니다.

팔로우 추가wing 암호

<html>
    <head>
        <title>Code Igniter Flash Session</title>
    </head>
    <body>
        <p>The session value of msg is <b> <?=$this->session->userdata('msg');?> </b></p>
    </body>
</html>

이리,

session->userdata('msg');?>는 msg 키로 세션 데이터 값을 검색하여 브라우저에 표시합니다.

이제 세션 플래시 방법에 대한 경로를 생성해 보겠습니다.

애플리케이션/config/routes.php 열기

팔로우 추가wing 라인

$route['flash_index'] = 'session controller';
$route['flash_message'] = 'session controller/flash_message';

이제 내장 서버를 시작해 보겠습니다. PHP 플래시 메시지를 테스트해 보세요.

터미널 열기

팔로우를 실행하세요.wing 명령

cd C:\Sites\ci-app
php -S localhost:3000

이리,

위 명령은 애플리케이션 코드 디렉터리를 탐색하고 포트 3000에서 내장 서버를 시작합니다.

참고: 애플리케이션 경로는 CodeIgniter를 다운로드한 경로와 일치해야 하며 컴퓨터에서 사용 가능한 모든 포트 번호를 사용할 수 있습니다. 포트 3000을 사용할 필요는 없습니다.

팔로우 로드wing 웹 브라우저의 URL: http://localhost:3000/flash_message

다음 페이지로 리디렉션됩니다.wing URL을 클릭하면 다음과 같은 결과를 얻을 수 있습니다.wing 결과 : http://localhost:3000/flash_index

다른 페이지로 플래시 메시지 보내기

웹 브라우저의 새로 고침 버튼을 클릭하거나 F5 키를 누르세요.

이제 팔로우를 받게 됩니다.wing 결과

다른 페이지로 플래시 메시지 보내기

CI 세션에 사용자 데이터 저장

이제 좀 더 발전된 예를 살펴보겠습니다. 단순화하기 위해 사용자 인증을 시뮬레이션하고 데이터베이스의 사용자 기록과 제출된 비밀번호를 확인하는 실제 구현을 수행하지 않습니다.

경로부터 시작해 보겠습니다.

application/config에 있는 Routes.php를 엽니다.

팔로우 추가wing 노선

$route['login'] = 'sessioncontroller/login';
$route['authenticate'] = 'sessioncontroller/authenticate';
$route['settings'] = 'sessioncontroller/settings';
$route['dashboard'] = 'sessioncontroller/dashboard';
$route['logout'] = 'sessioncontroller/logout';

이리,

  • $route['login'] = '세션컨트롤러/로그인'; 로그인 양식을 표시하는 경로를 정의합니다.
  • $route['authenticate'] = '세션컨트롤러/인증'; 성공적인 사용자 로그인을 시뮬레이션하는 경로를 정의하고 세션 로그인 데이터를 설정합니다.
  • $route['settings'] = '세션컨트롤러/설정'; 로그인한 사용자만 접근할 수 있는 보호된 페이지를 정의합니다.
  • $route['dashboard'] = '세션컨트롤러/대시보드'; 로그인한 사용자만 액세스할 수 있는 보호된 페이지를 정의합니다.
  • $route['logout'] = '세션컨트롤러/로그아웃'; 세션 데이터를 삭제하여 사용자를 로그아웃합니다.

이제 SessionController를 업데이트해 보겠습니다.

애플리케이션/컨트롤러/SessionController.php를 엽니다.

팔로우 추가wing 방법

public function check_auth($page) {
        if (!$this->session->userdata('logged_in')) {
            $this->session->set_flashdata('msg', "You need to be logged in to access the $page page.");
            redirect('login');
        }
    }

    public function login() {
        $this->load->view('sessions/login');
    }

    public function authenticate() {
        $this->session->set_userdata('username', 'John Doe');
        $this->session->set_userdata('logged_in', TRUE);
        redirect(base_url('dashboard'));
    }

    public function dashboard() {
        $this->check_auth('dashboard');
        $this->load->view('sessions/dashboard');
    }

    public function settings() {
        $this->check_auth('settings');
        $this->load->view('sessions/settings');
    }

    public function logout() {
        $this->session->unset_userdata('username');
        $this->session->unset_userdata('logged_in');
        redirect(base_url('login'));
    }

이리,

  • public function check_auth($page) {…}는 사용자가 로그인되었는지 확인한 다음 페이지에 대한 액세스를 허용하는 메서드를 정의합니다. 사용자가 로그인하지 않은 경우 사용자는 플래시 메시지와 함께 로그인 페이지로 리디렉션됩니다.
  • public function login() {…}은 세션 디렉터리에 있는 로그인 보기를 로드합니다.
  • public function authenticate() {…}는logged_in및username키에 대한 세션 사용자 데이터를 설정합니다. 참고: 우리는 로그인 정보를 확인하지 않습니다.tails 데이터베이스에 대해. 우리는 단순히 제출된 드를 가정하고 있습니다.tails 괜찮고 세션 데이터를 설정하십시오.
  • public function Dashboard() {…}는 $this->check_auth('dashboard');를 호출한 후 대시보드 페이지를 로드합니다. log_in 세션 키가 설정되어 있는지 확인합니다.
  • public function settings() {…} 역시 보호되는 설정 페이지를 로드합니다.
  • public function logout() {…}은 세션 데이터를 삭제하고 사용자를 로그아웃시킵니다. 이 메소드는 또한 로그인 페이지로 리디렉션됩니다.

CodeIgniter 세션 보기

팔로 만들기wing 애플리케이션/보기/세션의 보기

  • 대시보드.php
  • 로그인.php
  • settings.php

팔로우 추가wing Dashboard.php에 대한 코드

<!DOCTYPE html>
<html>
    <head>
        <title>Dashboard</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    </head>
    <body>
        <div class="container">
            <div class="column">
                <nav class="navbar" role="navigation" aria-label="main navigation">
                    <div id="navbarBasicExample" class="navbar-menu">
                        <div class="navbar-start">
                            <a href="<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a>
                            <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a>
                        </div>

                        <div class="navbar-end">
                            <div class="navbar-item has-dropdown is-hoverable">
                                <a class="navbar-link"><?=$this->session->userdata('username');?></a>

                                <div class="navbar-dropdown">
                                    <a class="navbar-item">My Profile</a>
                                    <hr class="navbar-divider">
                                    <a class="navbar-item">Sign out</a>
                                </div>
                            </div>
                        </div>
                    </div>
                </nav>
                <h3>Welcome Page</h3>
            </div>
        </div>
    </body>
</html>

이리,

session->userdata('username');?>는 인증 방법에서 설정한 사용자 이름을 표시합니다.

팔로우 추가wing login.php에 대한 코드

<!DOCTYPE html>
<html>
    <head>
        <title>Login</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    </head>
    <body>
        <div class="container">
            <div class="column">
                <p><?=$this->session->userdata('msg');?></p>
                <form method="post" action="<?= site_url('authenticate')?>">
                    <div class="field">
                        <label class="label">Username</label>
                        <div class="control">
                            <input class="input" type="text" placeholder="Text input">
                        </div>
                    </div>
                    <div class="field">
                        <label class="label">Password</label>
                        <div class="control">
                            <input class="input" type="passport" placeholder="Text input">
                        </div>
                    </div>
                    <div class="field is-grouped">
                        <div class="control">
                            <button class="button is-success">Login</button>
                        </div>
                    </div>
                </form>
            </div>
        </div>
    </body>
</html>

이리,

로그인 양식은 경로를 인증하기 위해 제출됩니다.

팔로우 추가wing settings.php에 대한 코드

<!DOCTYPE html>
<html>
    <head>
        <title>Settings</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css">
    </head>
    <body>
        <div class="container">
            <div class="column">
                <nav class="navbar" role="navigation" aria-label="main navigation">
                    <div id="navbarBasicExample" class="navbar-menu">
                        <div class="navbar-start">
                            <a href="<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a>
                            <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a>
                        </div>

                        <div class="navbar-end">
                            <div class="navbar-item has-dropdown is-hoverable">
                                <a class="navbar-link">Jim Jones</a>

                                <div class="navbar-dropdown">
                                    <a href="#" class="navbar-item">My Profile</a>
                                    <hr class="navbar-divider">
                                    <a href="<?= site_url('logout')?>" class="navbar-item">Sign out</a>
                                </div>
                            </div>
                        </div>
                    </div>
                </nav>
                <h3>Settings Page</h3>
            </div>
        </div>
    </body>
</html>

그것이 우리의 견해입니다. 이제 애플리케이션을 테스트해 보겠습니다.

이 튜토리얼에서는 내장된 PHP 웹 서버를 사용하지만 PHP를 지원하는 모든 웹 서버를 사용할 수 있습니다.

터미널 열기

팔로우를 실행하세요.wing 명령

cd C:\Sites\ci-app
php -S localhost:3000

이리,

위 명령은 애플리케이션 코드 디렉터리를 탐색하고 포트 3000에서 내장 서버를 시작합니다.

참고: 애플리케이션 경로는 CodeIgniter를 다운로드한 경로와 일치해야 하며 컴퓨터에서 사용 가능한 모든 포트 번호를 사용할 수 있습니다. 포트 3000을 사용할 필요는 없습니다.

팔로우 열기wing 웹 브라우저의 URL: http://localhost:3000/dashboard

당신은 다음 페이지로 리디렉션됩니다wing 페이지

CodeIgniter 세션 보기

로그인 버튼 클릭

당신은 다음을 볼 것입니다wing 결과

CodeIgniter 세션 보기

로그인하면 이제 세션 데이터를 볼 수 있습니다.

요약

이 튜토리얼에서는 CodeIgniter 세션 라이브러리의 기본 사항을 배웠고 이를 사용하여 임시 데이터를 플래시 메시지로 저장하는 방법과 보다 영구적인 데이터, 즉 사용자 로그인 데이터를 저장하는 방법을 배웠습니다.