본문 바로가기

프로그램/PHP

PHP 세션(session)


1.세션(session)
세션은 클라이언트에 저장하는 것이 아니라 서버에 저장되는 데이타이다.
세션은 32개의 문자열로 이루어진 세션 아이디를 생성
이 값은 쿠키를 통해 사용자의 시스템에 저장된다.


2.php에서 세션 저장방법
2.1 방법1
  사용자 데이타를 php.ini에서 지정한 디렉토리에 파일로 저장하는 방식
2.2 방법2
  서벙의 메모리에 저장하는 방식(속도가 빠름)
2.3 방법3
  사용자가 직접 세션을 다루는 방식
  세션 데이타를 데이타베이스에 저장하여 관리할 수 있다.

 

3.세션 함수
3.1 세션 시작
bool session_start(void)

세션을 사용하고자 하는 페이지의 상단에서 반드시 호출해야 한다.
이전에 발급된 세션이 유효한지 체크한 후 유효하지 않으면 새로 발급

세션아이디는 'PHPSESSID' 라는 쿠키에 저장된다.
$_COOKIE["PHPSESSID"]에 세션아이디가 저장된다.

 

3.2 세션에 데이타 등록

$_SESSION 배열에 데이타를 등록

 

예)

$_SESSION["userid"] = "lynx";

$_SESSION["username"] = "시라소니";

useid 세션변수에 "lynx"라는 세션 값을 , username 세션변수에 "시라소니"라는 세션값을 저장한다. 

 

3.3 세션에 데이타 삭제

void unset ( mixed var [, mixed var [, mixed ...]])

unset은 주어진 변수를 파괴하는 함수이다.

php3.0이하 에서는 항상 true를 리턴햇어나 4.0부터 void를 리턴하는 함수이다.

즉 아무값도 반환하지 않는다.

 

예)

unset($_SESSION["userid"]);  // $_SESSION에서 배열요소 하나를 삭제한다.

unset($aaa, $bbb, $ccc);  //하나 이상의 변수를 파괴

 

3.4 세션 종료

bool session_destory();

세션을 완전히 종료하려면 session_destory() 함수를 호출하면 된다.

현재 세션과 관련된 데이타를 모두 삭제한다.

 

3.5 기타 세션 함수

3.5.1 세션 변수 등록

bool session_register(mixed name  [,mixed name....]);

 

session_register("var_name1", "var_name2", "var_name3");

$_SESSION["var_name"] = var_value;

$HTTP_SESSION_VARS["var_name"] = var_value;

 

3.5.2 세션변수 취소

bool session_unregister(string name);

 

$ret = session_unregister("var_name");

 

3.5.3 현재의 세션 이름을 가져오거나 세팅

string session_name ( [string name])

리턴값 : 현재의 세션 이름

호출한 스크립트에서만 유효

예)

<?php

/* session name을 WebsiteID로 셋 */

$previous_name = session_name("WebsiteID");  //현재의 세션 네임을 리턴하고 새로 세팅

echo "The previous session name was $previous_name<p>";
?>

 

3.5.4 현재의 세션 아디를 가져오거나 세팅

string session_id([string id])

 

id를 등록하는 경우 a-z, A-Z, 1-9의 문자만 허용

호출한 스크립트에서만 유효

 

3.5.5 세션 변수가 저장되는 파일의 위치
string session_save_path([string path])

 

세션 데이타 파일이 저장된 디렉토리 경로를 반환하거나 지정한 디렉토리로 변경
호출한 스크립트에서만 유효

 

3.5.6 세션 변수 모두 초기화
void session_unset()

 

세션변수를 모두 초기화하지만 변수의 이름은 남는다.

 

3.5.7 세션 변수 등록 여부 확인
bool session_is_registered ( string name)

 

3.5.8 세션데이타 저장 방식

string session_module_name ( [string module])

module :

    "file" : 파일로 저장

    "mm" : 메모리에 저장

    "user" : 사용자 방식

 

현재 사용하는 세션의 저장방식을 반환하거나 세팅

 

위 값은 php.ini 의

session_save_handler = files

같이 설정되어 있다.

 

3.5.9 세션 재발급

bool session_regenerate_id ( void )

 

현재의 세션 id를 변경, 현재 세션의 정보는 유지

 

예)

<?php
session_start();

$old_sessionid = session_id();

session_regenerate_id();

$new_sessionid = session_id();

echo "Old Session: $old_sessionid<br />";
echo "New Session: $new_sessionid<br />";

print_r($_SESSION);
?>

 

3.5.10 세션쿠키 정보를 읽기

array session_get_cookie_params ( void )

 

이 함수는 lifetime, path, domain, secure 정보를 어레이 형태로 리턴한다.

 

3.5.11 세션쿠키 정보를 설정

void session_set_cookie_params ( int lifetime [, string path [, string domain [, bool secure]]])

 

이 함수는 lifetime, path, domain, secure 정보를 설정

 

3.5.12 세션 데이타 인코딩(?) //테스트 해봐야 함

string session_encode ( void )

 

현재 세션에 등록된 변수의 데이타를 인코딩된 문자열로 리턴한다.

 

3.5.13 세션 데이타 디코딩

bool session_decode ( string data)

 

인코딩 데이타를 디코딩하여 세션변수와 저장된값의 복원

 

3.5.14 캐쉬 제어 방식

string session_cache_limiter ( [string cache_limiter])

 

cache_limiter : 사용자가 요청한 페이지를 캐쉬로 남기는 방법

   nocache : 캐쉴를 남기지 않음

  private : 프록시 서버에 의한 캐쉬는 거부하고 사용자 캐쉬에는 남기는 방식

  public : 캐쉬를 남김

 

호출한 스크립트에서만 유효

 

사용자 가입 페이지 같은 경우

입력한 데이타를 서버로 전송후 에러가 발생한 경우 뒤로 가기 하면 입력된 데이타가 하나도 남아 있지 않는 경우가 사이트가 종종 있는데 이것은 캐슁을 하지 않아서 이다.

이것을 방지하려면 cache_limiter를 private 또는 public를 주면 된다.

그런데 이렇게 하면 refresh 해도 자료가 그대로 남아 있는 경우가 발생하는데 그런 경우에는

session_cache_limiter ("");

해주면 된다.

 

session_cache_limiter () 함수는 session_start() 함수 앞에 온다.

 

 

3.5.15 캐쉬 페이지 만료시간 지정

int session_cache_expire ( [int new_cache_expire])

 

현재의 캐쉬 페이지 만료시간을 반환 받거나 설정한다.

호출한 스크립트에서만 유효

 

<?php

/* set the cache limiter to 'private' */

session_cache_limiter('private');
$cache_limiter = session_cache_limiter();

 

/* set the cache expire to 30 minutes */
session_cache_expire(30);
$cache_expire = session_cache_expire();

 

/* start the session */

session_start();

echo "The cache limiter is now set to $cache_limiter</ br>";
echo "The cached session pages expire after $cache_expire minutes";
?>

 

3.5.16 세션 관련 사용자 함수 정의

bool session_set_save_handler ( string open, string close, string read, string write, string destroy, string gc)

이 함수를 사용하려면

php.ini의 session.save_handler = user 로 변경해야 한다.

 

open : 세션의 초기화 할때 호출하는 함수 이름

close : 스크립트를 마칠때 호출되는 함수의 이름

read  : 세션 데이타를 가져올때 호출되는 함수의 이름

write : 세션 데이타를 저장할때 호출되는 함수의 이름

gc : garbage collection 호출되는 함수의 이름

 

예)

<?php
function open($save_path, $session_name)
{
  global $sess_save_path, $sess_session_name;
      
  $sess_save_path = $save_path;
  $sess_session_name = $session_name;
  return(true);
}

function close()
{
  return(true);
}

function read($id)
{
  global $sess_save_path, $sess_session_name;

  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "r")) {
    $sess_data = fread($fp, filesize($sess_file));
    return($sess_data);
  } else {
    return(""); // Must return "" here.
  }

}

function write($id, $sess_data)
{
  global $sess_save_path, $sess_session_name;

  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "w")) {
    return(fwrite($fp, $sess_data));
  } else {
    return(false);
  }

}

function destroy($id)
{
  global $sess_save_path, $sess_session_name;
      
  $sess_file = "$sess_save_path/sess_$id";
  return(@unlink($sess_file));
}

/*********************************************
* WARNING - You will need to implement some *
* sort of garbage collection routine here.  *
*********************************************/
function gc($maxlifetime)
{
  return true;
}

session_set_save_handler("open", "close", "read", "write", "destroy", "gc");

session_start();

// proceed to use sessions normally

?>

 

3.5.17 기타

void session_write_close ( void ) : 세션 데이타를 저장하고 세션 종료

session_commit : Alias of session_write_close() 


[출처]
php session|작성자 매월향