15. [CodeIgniter3] 세션 사용 방법
세션은 사용자의 상태를 유지하고 활동을 추적하는 데 사용합니다.
주로 로그인에 사용됩니다.
처음 로그인한 정보를 세션에 저장해 두고 페이지를 이동할 때마다 로그인 여부를 세션에 데이터를 사용하여 처리할 수 있습니다.
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