이 플러그인은 워드프레스에 쿠키 - transient API 기반의 세션 기능을 제공합니다.
보통의 플러그인과 마찬가지로 wp-content/plugins 디렉토리에 이 플러그인을 설치하시고, 관리자 > 플러그인에서 활성화하세요.
이 플러그인은 일반적인 사용자를 위한 것이 아닌, 개발자의 편의를 위한 용도로 작성되었습니다.
아래는 대표 함수에 대한 간략한 설명입니다.
세션을 시작하는 함수입니다. nsess_get, nsess_set 같은 함수에서 자동으로 초기화하므로 굳이 부를 필요는 없습니다.
세션에 저장된 값을 가져오는 함수입니다.
- $key: 문자열로, 세션 내 값의 식별자입니다.
- $default: 세션에 해당 식별자로 저장된 값이 없을 때 대체할 값을 지정할 수 있습니다.
<?php
$foo = nsess_get( 'foo', 'FOO' ); // 세션에 'foo' 키로 저장된 값을 조회. 만약 키가 없다면 'FOO'를 리턴. 세션에 값을 저장하는 함수입니다.
- $key: 문자열로, 세션에 설정할 값의 식별자입니다.
- $value: serialize 가능한 어떤 값이든 가능합니다. 단, null을 입력하면 해당 키를 세션에서 제거하는 것과 동일합니다.
- $timeout: 지정된 시간만큼만 유효합니다. 단, 이 값은
NSESS_TIMEOUT을 초과할 수 없습니다. 생략하면 항상NSESS_TIMEOUT만큼 유지됩니다.
<?php
nsess_set( 'foo', 'bar', 3600 ); // 세션에 'foo' 키로 'bar' 값을 저장합니다. 단, 이 값은 앞으로 3600초동안만 유지됩니다.세션에 키가 존재하는지 확인합니다. 세션에 값이 저장되고 만료 시간이 지나지 않아야 참을 리턴합니다. 이전에 값을 저장한 적이 있더라도 만료 시간이 지나면 값은 폐기되는 것이 원칙이므로 거짓을 리턴하게 됩ㄴ다.
- $key: 문자열로, 존재하는지 확인하기 위한 값의 식별자입니다.
<?php
if ( nsess_has( 'foo' ) ) {
// 세션이 'foo' 키로 유효한 값을 가지고 있다면...
}이 함수는 세션에 저장된 값의 만료 시간을 조사하는 함수입니다. 세션에 존재하는 유효한 키를 입력하는 경우 만료 시간을 타임스탬프로 리턴합니다.
값이 존재하지 않거나, 만료되어 더이상 유효하지 않은 경우는 0을 리턴합니다.
<?php
$timeout = nsess_get_expiration( 'foo' );
if ( $timeout - time() > 3600 ) {
// 'foo'의 만료 시간이 1시간보다 더 남은 경우.
}세션의 값을 삭제하는 함수입니다.
nsess_set( 'foo', null )과 동일한 기능을 합니다.
- $key: 문자열로, 삭제할 세션 값의 식별자입니다.
<?php
nsess_remove( 'foo' ); // 'foo' 키를 가진 값을 세션에서 삭제.세션을 완전히 초기화합니다. 저장된 값이 모두 삭제됩니다.
단, 세션은 여전히 유지되며 세션의 만료 시간 또한 이 시점 이후로 NSESS_TIMEOUT만큼 유효합니다.
세션을 완전히 종료합니다. 함수를 호출한 시점으로 세션 자체가 완전히 삭제됩니다. 서버에서는 DB 값이 제거되고, 쿠키 또한 지워집니다.
클라이언트가 세션을 열었는지를 리턴합니다. 즉, 쿠키 값이 구워졌는지 아닌지를 검사합니다. 함수는 불리언을 리턴합니다. 참은 세션을 열었다는 뜻입니다. 거짓은 세션을 열지 않았거나, 세션이 완전히 완료었다는 것을 의미합니다.
이 세션은 클라이언트의 쿠키값을 기반으로 동작합니다. 그러므로 클라이언트에서 쿠키 값을 함부로 삭제하면 서버의 세션은 그냥 남아있게 됩니다. 단, 서버 측에서는 transient API를 사용하므로 원래 약속된 만료 시간이 지나면 자동으로 값은 소거됩니다.
또한 세션에 변화를 주는 함수, nsess_init, nsess_set, nsess_remove, nsess_reset, nsess_destroy 은
반드시 서버에서 헤더를 보내기 전에 호출하여야 합니다. 세션에 생긴 변화는 setcookie()를 호출해 헤더를 통하여 클라이언트에게도
전달되어야 합니다. 헤더가 전송된 후 생긴 세션의 변화는 클라이언트에게 올바르게 전달할 수 없어 세션에 문제가 생길 수 습니다.
nsess_get 함수는 읽기만 하기 때문에 헤더가 보내진 이후에도 사용하는데는 문제가 없습니다.
단, nsess_get 또한 처음에 nsess_init을 호출하므로 이 부분은 주의해야 합니다.
이 세션은 클라이언트와 서버 사이에 일정 시간동안 유효한 임의의 값들을 한적하게 읽고 쓰기 위한 장치입니다. 짧은 시간에, 아주 많은 분량의, 데이터를 빈번히 읽고 쓰기에는 부적합할 수 있습니다.
세션은 한 연결을 처리할 때만 유효합니다. 쿠키 기반의 난수를 이용하기 때문에 이런 경우에 거의 없겠지만, 만약 여러 연결이 동시에 쓰기 처리를 하는 경우, 원자적(atomic) 동작을 보장하지 않습니다.
wp-config.php 에 미리 설정할 수 있습니다.
NSESS_COOKIE_NAME: 쿠키 이름을 설정할 수 있습니다. 기본값은 'nsess' 입니다.NSESS_TIMEOUT: 세션 쿠키의 만료 시간을 설정할 수 있습니다. 초 단위로 입력 가능하며 기본값은 86400 (1일)입니다. 0이거나 음수이면 기본값인 86400으로 간주됩니다.NSESS_COOKIEPATH: 세션 쿠키의 경로를 지정합니다. 기본은 공백이며, 이 경우 워드프레스가 지정한COOKIEPATH상수값을 사용합니다.NSESS_COOKIE_DOMAIN: 세션 쿠키의 도메인을 지정합니다. 기본은 공백이며, 이 경우 워드프레스가 지정한COOKIE_DOMAIN상수값을 사용합니다.NSESS_SECURE: 세션 쿠키를 https 에서만 사용할지 말지를 결정합니다. 기본은 공백이며, 이때는 https 접속에만 사용 가능한 쿠키를 생성합니다.NSESS_HTTP_ONLY: 스크립트에서 차단 가능한 쿠키를 사용할지를 결정합니다. 참일 경우 스크립트에서 접근 불가합니다. 기본은 true 입니다.
NSESS_SECURE, NSESS_HTTP_ONLY는 불리언 값을 입력받지만, 문자열이나 정수로도 입력 가능합니다.
- true와 동치: 'yes', 'on', '1', 1
- false와 동치: 'no', 'off', '0', 0
아래는 기본값의 예시입니다.
define( 'NSESS_COOKIE_NAME', 'nsess' );
define( 'NSESS_TIMEOUT', 86400 );
define( 'NSESS_COOKIEPATH', '' );
define( 'NSESS_COOKIE_DOMAIN', '' );
define( 'NSESS_SECURE', '' );
define( 'NSESS_HTTP_ONLY', 'yes' );