예제를 통해 Codeigniter에서 세션을 설정하는 방법
CodeIgniter 세션 관리
이전에 데스크톱 애플리케이션을 개발한 적이 있다면 전역 변수를 정의하고 값을 할당하고 애플리케이션의 수명 주기 동안 이를 하나(1) 이상 열고 닫는 데 사용할 수 있으며 각 요청은 다음에 액세스할 수 있다는 것을 알고 있을 것입니다. 전역 변수.
즉, 애플리케이션의 상태가 유지됩니다. 즉, 로그인할 때 회사 이름을 전역 변수로 설정하면 로그인 양식을 닫은 후에도 회사 이름 상태가 유지됩니다.
HTTP는 방금 설명한 위의 시나리오와 약간 다르게 작동합니다. 무국적자입니다. 즉, 한 요청에서 수행한 작업이 다음 요청에서는 지속되지 않는다는 의미입니다. 티
o 이 문제를 해결하세요. PHP에는 두 가지 솔루션이 있습니다. 우리는 사용자의 컴퓨터에 있는 작은 파일인 쿠키로 작업하거나 쿠키와 유사하지만 대신 서버에 저장되고 쿠키보다 더 큰 용량을 갖는 세션으로 작업할 수 있습니다.
세션은 언제 사용하나요?
세션은 일반적으로 사용자의 활동을 페이지마다 알고 싶을 때 유용합니다. 예를 들어, 웹사이트에 보호된 영역이 있다고 가정해 보겠습니다. 사용자는 각 페이지에서 로그인할 필요가 없습니다. 사용자가 한 번 로그인하고 세션 변수에 세부 정보를 저장한 다음 추가 요청에서 동일한 데이터를 재사용할 수 있습니다. 다른 사용 사례로는 쇼핑 시스템에서 작업하고 사용자가 쇼핑 카트에 항목을 추가해야 하는 경우가 있습니다.
또는 CodeIgniter는 세션을 사용하여 다음 요청 시 데이터를 한 번만 사용할 수 있도록 합니다. 이는 데이터베이스 레코드를 편집 및 업데이트할 수 있고 사용자가 다른 페이지로 리디렉션될 때 사용자에게 일부 피드백을 반환하려는 경우 유용합니다.
CI 세션을 사용하여 다른 페이지로 플래시 메시지 보내기
이 섹션에서는 세션 라이브러리를 사용하여 플래시 메시지를 다른 페이지로 보내는 방법을 배웁니다. CodeIgniter
SessionController라는 새 파일을 생성합니다.
application/controllers/SessionController.php
다음 코드를 추가하세요
<?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를 만듭니다.
다음 코드를 추가하세요
<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 열기
다음 줄을 추가하세요
$route['flash_index'] = 'session controller'; $route['flash_message'] = 'session controller/flash_message';
이제 내장 서버를 시작해 보겠습니다. PHP 플래시 메시지를 테스트해 보세요.
터미널 열기
다음 명령을 실행하십시오
cd C:\Sites\ci-app php -S localhost:3000
이리,
위 명령은 애플리케이션 코드 디렉터리를 탐색하고 포트 3000에서 내장 서버를 시작합니다.
참고: 애플리케이션 경로는 CodeIgniter를 다운로드한 경로와 일치해야 하며 컴퓨터에서 사용 가능한 모든 포트 번호를 사용할 수 있습니다. 포트 3000을 사용할 필요는 없습니다.
웹 브라우저에 다음 URL을 로드하세요. http://localhost:3000/flash_message
다음 URL로 리디렉션되며, 다음과 같은 결과가 표시됩니다. http://localhost:3000/flash_index
웹 브라우저의 새로 고침 버튼을 클릭하거나 F5 키를 누르세요.
이제 다음 결과를 얻을 수 있습니다.
CI 세션에 사용자 데이터 저장
이제 좀 더 발전된 예를 살펴보겠습니다. 단순화하기 위해 사용자 인증을 시뮬레이션하고 데이터베이스의 사용자 기록과 제출된 비밀번호를 확인하는 실제 구현을 수행하지 않습니다.
경로부터 시작해 보겠습니다.
application/config에 있는 Routes.php를 엽니다.
다음 경로를 추가하세요
$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를 엽니다.
다음 방법을 추가하세요
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에 대한 세션 사용자 데이터를 설정합니다. 참고: 우리는 데이터베이스에 대한 로그인 세부 정보를 확인하지 않습니다. 우리는 제출된 세부 정보가 괜찮다고 가정하고 세션 데이터를 설정합니다.
- public function Dashboard() {…}는 $this->check_auth('dashboard');를 호출한 후 대시보드 페이지를 로드합니다. log_in 세션 키가 설정되어 있는지 확인합니다.
- public function settings() {…} 역시 보호되는 설정 페이지를 로드합니다.
- public function logout() {…}은 세션 데이터를 삭제하고 사용자를 로그아웃시킵니다. 이 메소드는 또한 로그인 페이지로 리디렉션됩니다.
CodeIgniter 세션 보기
application/views/sessions에 다음 뷰를 생성하세요.
- 대시보드.php
- 로그인.php
- settings.php
다음 코드를 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');?>는 인증 방법에서 설정한 사용자 이름을 표시합니다.
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>
이리,
로그인 양식은 경로를 인증하기 위해 제출됩니다.
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를 지원하는 모든 웹 서버를 사용할 수 있습니다.
터미널 열기
다음 명령을 실행하십시오
cd C:\Sites\ci-app php -S localhost:3000
이리,
위 명령은 애플리케이션 코드 디렉터리를 탐색하고 포트 3000에서 내장 서버를 시작합니다.
참고: 애플리케이션 경로는 CodeIgniter를 다운로드한 경로와 일치해야 하며 컴퓨터에서 사용 가능한 모든 포트 번호를 사용할 수 있습니다. 포트 3000을 사용할 필요는 없습니다.
웹 브라우저에서 다음 URL을 엽니다. http://localhost:3000/dashboard
다음 페이지로 이동됩니다.
로그인 버튼 클릭
다음과 같은 결과가 표시됩니다.
로그인하면 이제 세션 데이터를 볼 수 있습니다.
제품 개요
이 튜토리얼에서는 CodeIgniter 세션 라이브러리의 기본 사항을 배웠고 이를 사용하여 임시 데이터를 플래시 메시지로 저장하는 방법과 보다 영구적인 데이터, 즉 사용자 로그인 데이터를 저장하는 방법을 배웠습니다.