티스토리 뷰

오늘도 개발자/PHP

[PHP] 세션(Session)

오늘도공대생 2022. 2. 2. 08:38

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이 바로 유효기간으로 설정은 초단위 정수로 전달됩니다.

  • session_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;
}

 

 

 

 

 

 

 

 


세션과 관련한 전반적인 설정과 관련 함수는 아래 메뉴얼을 참고해주세요.

http://docs.php.net/manual/en/session.configuration.php

 

PHP: Runtime Configuration - Manual

Being unable to find an actual copy of mod_files.sh, and seeing lots of complaints/bug fix requests for it, here's one that works.  It gets all its parameters from PHP.INI, so you don't have the opportunity to mess up:#!/bin/bash## Creates directories for

docs.php.net

 

 

 

 

댓글