CodeIgniter3

15. [CodeIgniter3] 세션 사용 방법

drizzle0925 2022. 1. 3. 13:29
728x90

세션은 사용자의 상태를 유지하고 활동을 추적하는 데 사용합니다.

주로 로그인에 사용됩니다.

처음 로그인한 정보를 세션에 저장해 두고 페이지를 이동할 때마다 로그인 여부를 세션에 데이터를 사용하여 처리할 수 있습니다.

 

CodeIgniter에는 'Session'이라는 클래스 이름이 내장되어 있습니다.

이 세션의 목적은 사용자가 만든 다음 요청에 대해 데이터를 사용할 수 있도록 하는 것입니다.

 

세션 작업

사용자가 페이지를 요청하면 서버의 세션 클래스는 브라우저에서 보낸 쿠키가 유효한지 확인합니다.

세션 쿠키가 유효하지 않거나 사용할 수 없는 경우(만료) 새 세션이 생성됩니다.

유효한 세션이 있으면 세션 ID로 자동 업데이트됩니다.

초기화가 완료되면 세션이 자동으로 실행됩니다.

세션 읽기, 쓰기 및 업데이트에서 모든 것이 자동입니다.

 

세션 초기화

사이트의 각 페이지 요청/로드와 함께 세션은 전역적으로 실행되지만 데이터를 사용하기 위해 세션 초기화는 컨트롤러 생성자에서 수행되거나 autoload.php의 '세션'을 통해 시스템에 자동 로드될 수 있습니다.

 

컨트롤러 내에서 다음 코드 줄을 사용하여 세션을 로드할 수 있습니다.

$this->load->library('session');

 

또는 application/config/autoload.php 파일에서 자동 로드할 세션 라이브러리를 추가합니다.

$autoload['libaray'] = array('session');

 

일단 로드되면 아래 코드를 이용하여 세션 객체에 접근할 수 있습니다.

$this->session

 

세션 데이터 검색

$_SESSION은 세션 배열에서 정보를 제공하는 데 사용되는 슈퍼 글로벌 변수입니다.

정보를 가져오려면 $_SESSION['item']을 사용하면 됩니다.

 

세션에 저장된 데이터 값 가져오기

$this->session->data

 

또는 다음과 같이 검색할 매개변수를 사용하는 userdata() 메서드를 이용할 수도 있습니다.

$this->session->userdata('data');

 

세션은 다음과 같이 변수 내에 검색 및 저장할 수 있습니다.

$var = $this->session->item;
// 또는
$var = $this->session->userdata('item');

 

모든 기존 사용자 데이터를 가져오기 위해 메서드에 매개변수가 전달되지 않습니다.

$this->session->userdata();

참고 : Userdata() 메서드는 항목이 없으면 NULL을 반환합니다.

 

세션 데이터 추가

세션 데이터를 추가하면 매번 DB 쿼리를 실행하지 않고도 데이터를 전역적으로 사용할 수 있습니다.

세션 데이터는 $_SESSION['name'] = 'abc'와 같이 키-값 쌍으로 추가할 수 있습니다.

CodeIgniter에서는 set_userdata() 메서드를 이용하여 간단하게 수행할 수 있습니다.

두 가지 방법으로 한 번에 하나의 값을 전달하거나 아래와 같이 연관 배열을 전달할 수 있습니다.

 

하나의 값을 세션에 넣기

$this->session->set_userdata('some_name', 'some_value');

 

application/contollers/SessionController.php

ex1 메서드

<?php 
class SessionController extense CI_Controller
{
    public function __construct()
    {
        $this->load->library('session');
    }
    
    public function ex1()
    {
        // 세션에 데이터 넣기
        $this->session->set_userdata('name', 'junsu');
        // 세션에서 데이터 가져오기
        echo $this->session->userdata('name'); // junsu
    }
}
?>

 

 

여러 개의 값을 세션에 넣기

$array = array(
    'name' =>'junsu',
    'email' => 'junsu@mail.com'
);

$this->session->set_userdata($array);

 

ex2 메서드

public function ex2()
{
    $data = array(
        'name' => 'junsu',
        'email' => 'junsu@mail.com'
    );
    $this->session->set_userdata($data);

    echo $this->session->userdata('name') . " / " . $this->session->userdata('email');
}

 

 

여기서 $array는 데이터를 포함하는 위의 연관 배열입니다.

세션 값의 존재를 확인하기 위해 has_userdata()가 사용됩니다. 

$this->session->has_userdata('value');

 

 

세션 데이터 제거

CodeIgniter에는 세션 데이터를 추가하는 set_userdata() 메서드와 마찬가지로 세션 키를 전달하여 세션 데이터를 제거하는 unset_userdata() 메서드가 있습니다.

세션의 키 값인 세션에서 이름을 제거하려면 다음과 같이 할 수 있습니다.

$this->session->unset_userdata('name');

 

하나의 세션 값 지우기

public function ex3()
{
    $this->session->unset_userdata('name');
    echo $this->session->userdata('name');
}

 

 

세션 설정 해제는 다음과 같이 설정 해제할 항목 키를 사용하여 배열 형식으로 수행할 수도 있습니다.

$array_list = array('name', 'email');
$this->session->unset_userdata($array_list);

 

여러 개의 세션 값 지우기

public function ex4()
{
    $data = array('name', 'email');
    $this->session->unset_userdata($data);
    echo $this->session->userdata('name') . " / " . $this->session->userdata('email');
}

 

 

세션 플래시 데이터

플래시 데이터는 다음 요청에서만 사용할 수 있고 자동으로 지워지는 세션 데이터를 지원합니다.

이것은 주로 일회성 정보, 즉 오류/성공 메시지, 정보/상태 메시지 등을 표시하는데 매우 유용할 수 있습니다.

 

CodeIgniter에서 set_flashdata() 메서드는 다음 요청에만 사용할 수 있는 세션 설정에 사용할 수 있습니다.

두 개의 매개변수 키와 이에 연결된 값이 필요합니다.

$this->session->set_flashdata('error', 'You hava an error');
$this->session->set_flashdata('success', 'Successful');

set_flashdata()의 매개변수로 배열을 전달할 수도 있습니다.

 

플래시 데이터를 호출하려면 flashdata('key') 메서드를 매개변수에 전달하는 key_item과 함께 사용하여 특정 플래시 데이터를 호출하거나 매개변수 없이 flashdata()를 호출하여 모든 플래시 데이터를 호출합니다.

$this->session->flashdata('error'); // 특정 플래시 데이터
$this->session->flashdata(); // 모든 플래시 데이터

추가 요청을 위해 플래시 데이터를 유지하기 위해 keep_flashdata() 메서드가 사용됩니다.

단일 key_item 또는 배열이 매개변수로 전달될 수 있습니다.

$this->session->keep_flashdata('success');
$this->session->keep_flashdata(array('error', 'success'));

 

플래시 데이터 예제

플래시 데이터와 일반 세션 데이터를 만들어보고 다른 메서드에서 두 데이터를 호출해 봅니다.

// 플래시 데이터 만들기
public function ex5()
{
    $this->session->set_flashdata('item1', 'value1');
    echo $this->session->userdata('item1');
}

// 일반 세션 데이터 만들기
public function ex6()
{
    $this->session->set_userdata('item2', 'value2');
    echo $this->session->userdata('item2');
}

// 플래시 데이터와 일반 세션데이터 호출하기
public function ex7()
{
    echo $this->session->userdata('itme1');
    echo $this->session->userdata('item2');
}

 

 

세션에 대해 간단한 예제 코드(세션 플래시 데이터 사용)

Controller

application/contollers/SessionController.php 파일을 만들고 아래 코드를 입력합니다.

<?php 
class SessionController extends CI_Controller
{
    public function __construct()
    {
        // CodeIgniter의 기본 생성자 호출
        parent::__construct();

        // autoload에서 url helper를 호출했으므로 주석처리함
        // $this->load->helper('url');
        // session library 호출
        $this->load->library('session');
    }

    public function index()
    {
        $this->load->view('session');
    }

    public function flash()
    {
        $this->session->set_flashdata('sess', 'session message');
        redirect(base_url('Session/index'));
    }
}
?>

 

View

application/views/session.php 파일을 만들고 아래 코드를 입력합니다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CI Session Flash Data</title>
</head>
<body>
    <p>The session value of session is <b><?php echo $this->session->flashdata('sess'); ?></b></p>
</body>
</html>

 

 

Github : https://github.com/jun0925/study/commit/0291af666e8d11b237959a7f67c7f0b6c5500846

728x90