커스텀 세션

마젠토 커스텀 세션

마젠토 세션의 기본적 사용방법


마젠토의 기본적인 세션 사용법은 마젠토 세션 사용법에서 간략하게 적어놓았는데요, 지금 보니 지난 몇년전에 작성한 글이라 설명이 좀 부족한듯 해서 조금더 자세한 설명과 나아가 마젠토에 기본적으로 있는 세션 말고 커스텀 세션을 만드는 방법을 설명하도록 하겠습니다.

마젠토에 있는 기본적인 세션의 종류는 Core, Customer, Admin, Checkout 이렇게 네가지 종류가 있구요, 세션을 사용하려면 아래와 같은 코드를 사용하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Core Session
$coreSession = Mage::getSingleton('core/session');
$coreSession->setMyData('some string'); // "some string"을 "my_data"에 저장
echo $coreSession->getMyData(); // "some string"을 출력
$coreSession->setMyData(); // "my_data" 삭제

// Customer Session
$customerSession = Mage::getSingleton('customer/session');

// Adminhtml Session
$adminhtmlSession = Mage::getSingleton('adminhtml/session');

// Checkout Session
$checkoutSession = Mage::getSingleton('checkout/session');

위의 예제에서는 $coreSession에서만 get/set의 예제를 사용했는데 나머지 customer, adminhtml, checkout 세션 또한 사용법은 다르지 않습니다.

PHP 세션과 마젠토 세션의 비교


아래의 예제는 기본적인 PHP의 세션 사용법입니다.

1
2
3
session_start();
$_SESSION['my_data'] = 'some string';
echo $_SESSION['my_data']; // "some string"을 출력

이렇게 마젠토의 세션 사용방법은 PHP의 기본적인 세션 사용법과는 겉으로 달라 보이긴 해도 결과적으로는 같습니다.
core, customer, adminhtml, checkout은 단지 세션의 용도를 구분짓는 네임스페이스일 뿐, 결과적으로는 모두 $_SESSION에 저장됩니다.
아래 코드를 참고하세요.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// core 세션에 데이터 저장
$coreSession = Mage::getSingleton('core/session');
$coreSession->setMyData('some string'); // "some string"을 "my_data"에 저장

// core 세션의 데이터 출력
echo $coreSession->getMyData();

// 위의 core 세션의 출력은 아래의 php 세션의 출력과 같습니다.
echo $_SESSION['core']['my_data'];

// 마찬가지로 아래와 같이 customer 세션에 데이터를 저장했을때
$customerSession = Mage::getSingleton('customer/session');
$customerSession->setLastLoggedIn(date('Y-m-d H:i:s'));

// 아래 두개의 명령문은 같은 값을 출력합니다.
echo $customerSession->getLastLoggedIn();
echo $_SESSION['customer']['last_logged_in'];

단지 core 세션의 Mage_Core_Model_Session 모델, customer 세션의 Mage_Customer_Model_Session 모델 등등은 모두 최종적으로 Varien_Object 모델을 extend 하기 때문에 array의 형식의 $_SESSION 변수보다는 get/set/uns의 사용이 가능한 object 형식의 변수를 사용하는것 이므로 어렵게 느낄 필요는 없습니다.

커스텀 모듈의 커스텀 세션


커스텀 모듈을 개발하다보면 모듈만의 세션이 필요할때가 있습니다.
기존의 core, customer, checkout, adminhtml 세션과의 중복된 사용을 금지하기 위해서도 그렇고 기존의 세션과는 다른 세션모델을 사용하기 위해서 커스텀 세션이 필요하기도 합니다.
만약 커스텀 모듈만의 세션이 필요할때엔 간단하게 네임스페이스를 하나 더 만들면 됩니다.
커스텀 모듈내에 /app/code/local/{MyCompany}/{MyModule}/Model/Session.php 파일을 하나 작성해서 아래와 같이 $this->init(‘mymodule’); 을 __construct() 함수에 넣어주면 됩니다.
mymodule은 core, customer, checkout 같은 모듈의 이름 또는 세션을 구분하기 위한 네임스페이스 입니다.

1
2
3
4
5
6
7
class MyModule_Custom_Model_Session extends Mage_Core_Model_Session_Abstract
{
    public function __construct()
    {
        $this->init('mymodule');
    }
}

위와 같이 셋업하고 나서 실질적으로 mymodule 세션을 사용하려면 아래와 같은 형식으로 세션을 불러와서 사용할수 있습니다.

1
2
3
4
$myModuleSession = Mage::getSingleton('mymodule/session');
$myModuleSession->setMyData('some string');
echo $myModuleSession->getMyData(); // 'some string' 출력
$myModuleSession->setMyData(); // 데이터 지우기

웹프로그래밍에 있어서 세션은 상당히 널리 사용되고 있구요, 마젠토 내에서 커스텀 모듈을 개발하다보면 모듈 만의 세션이 자주 필요합니다.
그럴때엔 마젠토 기존의 core, customer, checkout, adminhtml 세션을 사용하기 보다는 위의 예제에서 처럼 커스텀 세션을 사용하는것이 훨씬 더 깔끔하고 더 나은 개발 방법입니다.

0 replies

Leave a Reply

Want to join the discussion?
Feel free to contribute!

Leave a Reply

Your email address will not be published. Required fields are marked *