[PHP] 세션(Session)

Seo Joonsoo·2022년 6월 25일
0

php

목록 보기
17/23

session_save_path()

session_start()

session_set_cookie_params();

PHP파일을 통해 php.ini설정을 수정하려면 ini_set()함수를 사용하면 됩니다.

php.ini 설정에서 session.use_strict_mode = 1로 설정되어 있다면 Session ID가 영구적으로 사용될 수 있습니다. 이렇게 될 경우 공격자가 세션 ID 훔쳐와 사용할 수 있기 때문에 해당설정은 0으로 꺼두는 것이 좋습니다.

session.use_only_cookies는 쿠키로면 session ID 를 사용하도록 하는 것으로 URL의 GET 값으로 PHPSESSID가 전달되는 것을 지원하지 않게 합니다. 해당 설정은 1로 켜주세요.

session.cookie_httpOnly는 Javascript Injection을 통해 클라이언트의 Session ID가 노출 될 수 있으므로 1로 켜서 막아주어야 합니다.

session.cookie_secure설정은 https를 사용할 때 사용하는 것이 좋습니다.

세션에는 쿠키와 마찮가지로 유효기간이 있습니다. 이 유효기간이 만료되면 GC에 의해서 삭제되게 됩니다.
이러한 설정은 php.ini에서 session.gc로 시작되는 설정들입니다.
session.gc_maxlifetime이 바로 유효기간으로 설정은 초단위 정수로 전달됩니다.

  • sesion_set_cookie_params()
  • session_gc()

session_gc는 유효기간이 만료된 세션들을 정리해주는 함수이지만 session_gc의 수행은 완벽하지 않기 때문에 해당 작업을 온전히 믿어서는 안됩니다.

ini_set('session.gc_maxlifetime',10);
session_set_cookie_params(10);
session_start();
session_gc();

일반적으로는 session_gc를 주기적으로 수행하도록해 세션 파일들을 정리해줍니다.


타임 스템프를 활용한 세션 관리

session_save_path(dirname(__DIR__) . '/sessions');
session_start();

$_SESSION['timestamp'] = $_SERVER['REQUEST_TIME'];

$time = strtotime('+10 seconds');
$diff = $time - $_SESSION['timestamp'];
$sessionTimeOut = 10;

if ($diff >= $sessionTimeOut) {
    /*
        ~세션을 파괴 후 기타 작업 진행 (php 가이드라인에서 권장하지 않음)
    */
    /* 세션 재설정 방법 */
    session_regenerate_id();
    $_SESSION['timestamp'] = time();
    exit;
}
profile
여러분들 삶에 한 획을 더하고 싶습니다.

0개의 댓글