관리 메뉴

POTATO THAT WANT TO BE HUMAN

[PHP] phpμ„Έμ…˜(Session) λ³Έλ¬Έ

BACKEND/PHP

[PHP] phpμ„Έμ…˜(Session)

λ…œνž 2022. 4. 1. 12:20
λ°˜μ‘ν˜•

πŸ€” μ„Έμ…˜μ΄λž€ λ­”κ°€μš”? 

 

μ„Έμ…˜(Session)은 μ›Ή μ„œλ²„μ— 정보λ₯Ό μ €μž₯ν•˜κ³  μ‚¬μš©μžμΈ‘μ—λŠ” μ ‘κ·Όν•  수 μžˆλŠ” ν‚€ 값을 μ €μž₯ν•©λ‹ˆλ‹€.

κ·Έλ ‡λ‹€λ©΄ μΏ ν‚€λŠ”? μΏ ν‚€λŠ” λͺ¨λ“  정보가 μ‚¬μš©μž 츑의 컴퓨터에 μ €μž₯λ©λ‹ˆλ‹€.

 

μ›Ήμ„œλ²„μ— 데이터가 μ €μž₯되고 ν•„μš”ν•  λ•Œλ§ˆλ‹€ λΈŒλΌμš°μ €μ—μ„œ ν‚€ κ°’μœΌλ‘œ μ„œλ²„μ— μš”μ²­μ„ ν•©λ‹ˆλ‹€. 그리고 λΈŒλΌμš°μ €λ₯Ό μ’…λ£Œν•˜λŠ” μ‹œμ μ—μ„œ μ„Έμ…˜μ΄ μ‚­μ œλ˜λ„λ‘ 섀정이 κ°€λŠ₯ν•΄μ„œ μΏ ν‚€μ—λ§Œ 데이터λ₯Ό μ €μž₯ν•˜λŠ” 것보닀 λ³΄μ•ˆμ„±μ΄ λ†’μŠ΅λ‹ˆλ‹€. λ•Œλ¬Έμ— 둜그인과 같은 인증 μ²˜λ¦¬μ—μ„œ 많이 μ‚¬μš©λ©λ‹ˆλ‹€.

 

μ„Έμ…˜μ€ 주둜 보이지 μ•ŠλŠ” 데이터λ₯Ό ν™œμš©ν•  λ•Œ μ“°μž…λ‹ˆλ‹€. λ˜ν•œ νœ˜λ°œμ„± λ°μ΄ν„°λ‘œ, 인터넷 창을 끄면 μ‚¬λΌμ§‘λ‹ˆλ‹€. 

 

 

1. μ„Έμ…˜ μ‹œμž‘ν•˜κΈ° 😢

 

<?php
// μ„Έμ…˜ μ‹œμž‘
session_start();

 

phpμ—μ„œ session_start()λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„Έμ…˜μ„ μ‹œμž‘ν•©λ‹ˆλ‹€.

μ‚¬μš©μž 정보가 μ›Ή μ„œλ²„μ— 없을 경우 μƒˆλ‘œμš΄ μ„Έμ…˜μ„ μƒμ„±ν•˜κ³ , 이미 μ„Έμ…˜μ΄ μƒμ„±λ˜μ–΄ μžˆλ‹€λ©΄ κΈ°μ‘΄ μ„Έμ…˜μ„ μ‚¬μš©ν•©λ‹ˆλ‹€. 

 

( μΏ ν‚€μ˜ 값은 λΈŒλΌμš°μ €μ˜ 개발자 도ꡬλ₯Ό 톡해 확인할 수 μžˆμ§€λ§Œ μ„Έμ…˜μ˜ 값은 μ„œλ²„μ— μ €μž₯λ˜λŠ” κ²ƒμ΄κΈ°λ•Œλ¬Έμ— 개발자 λ„κ΅¬μ—μ„œλŠ” 확인할 수 μ—†μŠ΅λ‹ˆλ‹€. )

 

phpμ—μ„œ μ„Έμ…˜μ„ μƒμ„±ν•˜λ©΄ 기본적으둜 μ„Έμ…˜μ˜ 이름은 PHPSESSID둜 μ €μž₯λ©λ‹ˆλ‹€. μ΄λŠ” php μ„€μ •νŒŒμΌμΈ php.iniμ—μ„œ 변경이 κ°€λŠ₯ν•©λ‹ˆλ‹€. μΌμ‹œμ  변경이 ν•„μš”ν•˜λ‹€λ©΄ session_name('λ³€κ²½ν•  이름') 을 μ‚¬μš©ν•΄ λ³€κ²½ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

session_name()을 μ‚¬μš©ν•˜λ €λ©΄ session_start()보닀 μœ„μ— μž…λ ₯ν•΄μ•Ό 였λ₯˜μ—†μ΄ μž‘λ™ν•©λ‹ˆλ‹€. 

 

session_start() ν•¨μˆ˜λ₯Ό 같은 νŒŒμΌμ—μ„œ μ—¬λŸ¬ 번 μ‹€ν–‰ν•˜κ²Œ λœλ‹€λ©΄ 이미 μ„Έμ…˜μ΄ μ‹€ν–‰λ˜μ—ˆλ‹€λŠ” μ•Œλ¦Όμ„ 좜λ ₯ν•˜λ‹ˆ

session_id() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν˜„μž¬ μƒμ„±λœ μ„Έμ…˜μ΄ μžˆλŠ”μ§€ ν™•μΈν•œ ν›„ μ„Έμ…˜μ„ μ‹œμž‘ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. 

( session_id() ν•¨μˆ˜λŠ” λ°œκΈ‰λœ μ„Έμ…˜ idκ°€ μžˆλ‹€λ©΄ idλ₯Ό, μ—†λ‹€λ©΄ falseλ₯Ό λ°˜ν™˜ )

 

<?php
// session_id()λŠ” λ°œκΈ‰λœ μ„Έμ…˜ idκ°€ μžˆλ‹€λ©΄ μ„Έμ…˜μ˜ idλ₯Ό, μ—†λ‹€λ©΄ falseλ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
if(!session_id()){
    // idκ°€ 없을 경우 μ„Έμ…˜ μ‹œμž‘
    session_start();
}

 

 

2. μ„Έμ…˜ λ³€μˆ˜ μ‚¬μš© 😐

 

<?php
// μ„Έμ…˜μ‹œμž‘
session_start();

// μ„Έμ…˜ λ³€μˆ˜ 등둝
$_SESSION['userNamer'] = 'λ…œνž';
$_SESSION['userPw'] = '1234';

// λ“±λ‘λœ λ³€μˆ˜ μ‚¬μš©
echo "userName κ°’: ".$_SESSION['userName']."<br/>";
echo "userPw κ°’: ".$_SESSION['userPw'];

μ„Έμ…˜μ„ μ‚¬μš©ν•˜μ—¬ λ³€μˆ˜λ₯Ό λ“±λ‘ν•˜λ €λ©΄ $_SESSION['λ³€μˆ˜λͺ…'] = data ν˜•νƒœλ‘œ μ‚¬μš©ν•˜λ©΄ λ©λ‹ˆλ‹€. μœ„ μ½”λ“œμ²˜λŸΌ $_SESSION['userName'] = "λ…œνž"; 이라고 ν•˜λ©΄ userNameμ΄λΌλŠ” μ„Έμ…˜ λ³€μˆ˜μ— testerλΌλŠ” 값을 μ €μž₯ν•œλ‹€λŠ” μ˜λ―Έμž…λ‹ˆλ‹€.

 

λ“±λ‘λœ μ„Έμ…˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것도 등둝과 κ°™μŠ΅λ‹ˆλ‹€. $_SESSION['λ³€μˆ˜λͺ…'] ν˜•νƒœλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. κ·ΈλŒ€λ‘œ μ“°λ©΄ μ½”λ“œκ°€ κΈΈμ–΄μ§ˆ 수 μžˆμœΌλ‹ˆ php λ³€μˆ˜μ— μ €μž₯ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것이 νŽΈλ¦¬ν•©λ‹ˆλ‹€.  

 

 

3. μ„Έμ…˜ λ³€μˆ˜ ν•΄μ œ πŸ™‚

 

<?php
// μ„Έμ…˜ μ‹œμž‘ 
session_start();

// μ„Έμ…˜ λ³€μˆ˜ 등둝
$_SESSION['userName'] = 'λ…œνž';

// λ“±λ‘λœ λ³€μˆ˜ ν•΄μ œ
unset($_SESSION['userName']);
echo "userName κ°’: ".$_SESSION['userName'];

 

λ“±λ‘λœ λ³€μˆ˜λ₯Ό ν•΄μ œν•˜κΈ° μœ„ν•΄μ„œλŠ” unset()을 μ‚¬μš©ν•©λ‹ˆλ‹€. unset($_SESSION['λ³€μˆ˜λͺ…']) ν˜•νƒœλ‘œ μž…λ ₯ν•˜λ©΄ ν•΄λ‹Ή λ³€μˆ˜κ°€ 등둝이 ν•΄μ œλ˜μ–΄ μ‚¬μš©ν•  수 μ—†κ²Œ λ©λ‹ˆλ‹€. ( unset으둜 ν•΄μ œν•œ ν›„ λ³€μˆ˜λ₯Ό ν˜ΈμΆœν•˜λ©΄ μ •μ˜λ˜μ§€μ•ŠμŒ μ—λŸ¬κ°€ λ°œμƒν•˜κ²Œ λ©λ‹ˆλ‹€. )

λ§Œμ•½ λͺ¨λ“  λ³€μˆ˜μ˜ 등둝을 ν•΄μ œν•˜κ³  μ‹Άλ‹€λ©΄ session_unset() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ λͺ¨λ“  λ³€μˆ˜μ˜ 등둝이 ν•΄μ œλ©λ‹ˆλ‹€.

μ„Έμ…˜μ„ μ™„μ „νžˆ μ’…λ£Œν•˜κ³  μ‹Άλ‹€λ©΄ session_destroy()λ₯Ό μ‚¬μš©ν•˜μ—¬ μ„Έμ…˜ 파일과 λΈŒλΌμš°μ €μ˜ μΏ ν‚€λ₯Ό μ‚­μ œν•˜μ—¬ μ„Έμ…˜μ΄ μ’…λ£Œλ©λ‹ˆλ‹€.

 

 

4. μ„Έμ…˜ λ³€μˆ˜ 등둝 확인 😊

 

<?php
// μ„Έμ…˜ μ‹œμž‘
session_start();

// λ³€μˆ˜ 등둝
$_SESSION['userId'] = '';

// λ³€μˆ˜ 등둝 μ—¬λΆ€ 확인
if(!isset($_SESSION['userId'])) {
    $_SESSION['userId'] = 'data1';
    echo 'μƒˆλ‘œμš΄ λ³€μˆ˜ 생성!';
} else {
    $_SESSION['userId'] = 'data2';
    echo 'κΈ°μ‘΄ λ³€μˆ˜ 데이터 λ³€κ²½';
}

 

isset() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λ©΄ ν•΄λ‹Ή λ³€μˆ˜κ°€ 등둝이 λ˜μ–΄μžˆλŠ”μ§€ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. isset($_SESSION['λ³€μˆ˜λͺ…']) ν˜•νƒœλ‘œ μ‚¬μš©ν•˜λ©° λ§Œμ•½ ν•΄λ‹Ή λ³€μˆ˜κ°€ 등둝이 λ˜μ–΄μžˆλ‹€λ©΄ trueλ₯Ό, 등둝이 λ˜μ–΄μžˆμ§€ μ•Šλ‹€λ©΄ falseλ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 

 

μœ„ μ½”λ“œλŠ” λ³€μˆ˜κ°€ μƒμ„±λ˜μ§€ μ•Šμ•˜λ‹€λ©΄ data1을, 생성이 λ˜μ–΄μžˆλ‹€λ©΄ data2λ₯Ό μ €μž₯ν•˜κ³  λ³€μˆ˜μ˜ 값을 좜λ ₯ν•˜λŠ” γ…—γ…‹λ“œμž…λ‹ˆλ‹€. μ‹€ν–‰ν•˜κ²Œ 되면 λ³€μˆ˜λŠ” 등둝이 λ˜μ–΄μžˆμœΌλ―€λ‘œ data2κ°€ 좜λ ₯이 λ˜λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

5. μ„Έμ…˜ id λ³€κ²½ πŸ˜„

 

php의 μ„Έμ…˜μ€ λΈŒλΌμš°μ €μ˜ 쿠킀에 λ“±λ‘λœ idλ₯Ό μ‚¬μš©ν•˜μ—¬ μ„œλ²„μ— μ €μž₯된 데이터에 μ ‘κ·Όν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ μ„Έμ…˜ idλ₯Ό νƒˆμ·¨λ‹Ήν•œλ‹€λ©΄ μ„Έμ…˜μ— μ €μž₯된 데이터듀 λ˜ν•œ νƒˆμ·¨λ‹Ήν•  μœ„ν—˜μ΄ λ†’μ•„μ§‘λ‹ˆλ‹€.

κ·Έλž˜μ„œ 일반적으둜 μ‚¬μš©μžμ˜ 인증정보에 변동(둜그인 및 λ‘œκ·Έμ•„μ›ƒ), μ„€μ • λ³€κ²½ λ“± μ€‘μš”ν•œ 변경사항이 μžˆμ„ λ•Œ μ„Έμ…˜ idλ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€. phpμ—μ„œλŠ” session_regenerate_id() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒˆλ‘œμš΄ idλ₯Ό λ°œκΈ‰λ°›μ•„ μΏ ν‚€λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€. 

 

<?php
// μ„Έμ…˜ μ‹œμž‘
session_start();

// ν˜„μž¬ μ„Έμ…˜ id 확인
echo session_id();
echo '<br/><br/>';

// μ„Έμ…˜ id μ‹ κ·œ λ°œκΈ‰
session_regenerate_id();

// μ‹ κ·œ λ°œκΈ‰λœ id 확인
echo session_id();

 

session_regenerate_id() ν•¨μˆ˜μ˜ κΈ°λ³Έ 섀정은 μ„Έμ…˜ idλ₯Ό λ³€κ²½ν•œ ν›„ 이전 μ„Έμ…˜ 데이터λ₯Ό μ‚­μ œν•˜μ§€ μ•ŠλŠ” κ²ƒμž…λ‹ˆλ‹€. id만 μƒˆλ‘œ λ°œκΈ‰ν•˜μ—¬ 데이터λ₯Ό λ³΅μ œν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€. κ·Έλž˜μ„œ μ„œλ²„μ—μ„œ 확인을 해보면 idλŠ” λ‹€λ₯΄μ§€λ§Œ 같은 데이터λ₯Ό 가지고 μžˆλŠ” μ„Έμ…˜ 파일이 ν™•μΈλ©λ‹ˆλ‹€.

 

이전 데이터λ₯Ό μ§€μš°κ³  μ‹Άλ‹€λ©΄ session_regenerate_id(true) ν˜•μ‹μœΌλ‘œ νŒŒλΌλ―Έν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ 이전 μ„Έμ…˜ 데이터λ₯Ό μ‚­μ œν•˜λ„λ‘ ν•΄μ•Όν•©λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μƒˆλ‘œμš΄ idκ°€ λ°œκΈ‰λ˜κ³  μ΄μ „μ˜ μ„Έμ…˜μ€ μ™„μ „νžˆ μ‚­μ œλ©λ‹ˆλ‹€.

 

 

6. μ„Έμ…˜ μ’…λ£Œν•˜κΈ° 😁

 

기본적으둜 php의 μ„Έμ…˜μ„ λΈŒλΌμš°μ €κ°€ 연결을 끊고 μΌμ •μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ μ„Έμ…˜ 데이터가 μ €μž₯된 νŒŒμΌμ„ μ‚­μ œν•˜λŠ” κ²ƒμœΌλ‘œ μ™„μ „νžˆ μ’…λ£Œκ°€ λ©λ‹ˆλ‹€. 

κ·ΈλŸ¬λ‚˜ μ‚¬μš©μžμ˜ μš”μ²­μœΌλ‘œ μ„Έμ…˜μ„ μ’…λ£Œν•˜λŠ” κ²ƒμœΌλ‘œ λ‘œκ·Έμ•„μ›ƒ κΈ°λŠ₯을 λ§Œλ“€ λ•Œμ—λŠ” 직접 μ„Έμ…˜μ„ μ’…λ£Œμ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€. 그럴 λ•Œ μ‚¬μš©ν•˜λŠ” ν•¨μˆ˜κ°€ session_destroy() ν•¨μˆ˜ μž…λ‹ˆλ‹€.

 

<?php
// μ„Έμ…˜ 데이터에 μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ„Έμ…˜ μ‹œμž‘
if (!session_id()) {
    session_start();
}

// μ„Έμ…˜ 데이터λ₯Ό 빈 λ°°μ—΄λ‘œ μ΄ˆκΈ°ν™”
$_SESSION = array();
// λ˜λŠ” session_unset(); μ‚¬μš©

// μ„Έμ…˜ id 값이 μ €μž₯λ˜μ–΄ μžˆλŠ” μΏ ν‚€λ₯Ό μ‚­μ œ
if (ini_get("session.use_cookies")) {
	$params = session_get_cookie_params();
    setcookie(
        session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// μ„Έμ…˜ 파일 μ‚­μ œ
session_destory();

 

php κ³΅μ‹λ¬Έμ„œμ— λ”°λ₯΄λ©΄ session_destroy() ν•¨μˆ˜λŠ” ν˜„μž¬ μ„Έμ…˜μ˜ λͺ¨λ“  데이터λ₯Ό νŒŒκ΄΄ν•˜λŠ” ν•¨μˆ˜μ΄λ‹€. 즉, μ„Έμ…˜μ˜ 데이터가 μ €μž₯λ˜μ–΄ μžˆλŠ” 파일 자체λ₯Ό μ‚­μ œν•˜λŠ” 것이닀.

 

κ·ΈλŸ¬λ‚˜ 단지 μ„Έμ…˜ νŒŒμΌμ„ μ‚­μ œν•˜λŠ” 것이지, μ„Έμ…˜ id 값이 μžˆλŠ” μΏ ν‚€λŠ” κ·ΈλŒ€λ‘œ λ‚¨μ•„μžˆκ²Œ λ©λ‹ˆλ‹€. κ·Έλž˜μ„œ setcookie()ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄ μ„Έμ…˜ idκ°€ μ €μž₯된 μΏ ν‚€λ₯Ό κ°•μ œλ‘œ λ§Œλ£Œμ‹œμΌœ μ‚­μ œν•΄μ€˜μ•Ό ν•©λ‹ˆλ‹€.

 

λ˜ν•œ $_SESSION λ³€μˆ˜μ— 빈 배열을 λ„£λŠ” μ΄μœ λ„ κ°™μŠ΅λ‹ˆλ‹€. session_destroy() ν•¨μˆ˜κ°€ $_SESSION λ³€μˆ˜κΉŒμ§€ ν•΄μ œν•˜λŠ” 것이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ— 빈 배열을 λ„£μ–΄ μ΄ˆκΈ°ν™”μ‹œμΌœμ£ΌλŠ” κ²ƒμž…λ‹ˆλ‹€. session_unset() ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄λ„ 같은 λ™μž‘μ„ μ‹€ν–‰ν•©λ‹ˆλ‹€. 

λ°˜μ‘ν˜•

'BACKEND > PHP' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[PHP] λ”°μ˜΄ν‘œ 처리 - addslashes()  (0) 2022.01.27
[PHP] phpλž€?  (0) 2022.01.18
Comments