PHP

쿠키와 세션

  • cookie
  • 클라이언트(브라우저)에 데이터를 저장
  • setCookie
  • $_COOKIE
<?php
	setCookie('cookie1', '생활코딩');
	setCookie('cookie2', time(), time()+60);
?>
<?php
echo $_COOKIE['cookie1']."<br />";
echo time()-$_COOKIE['cookie2'];
?>

세션이란?

  • session
  • SID(session ID)를 식별자로 서버에 데이터를 저장
  • SID로는 쿠키나 도메인 파라미터를 사용
  • session_start(); 로 시작, 스크립트의 최상단에 위치해야 함
  • $_SESSION
  • 데이터는 서버 내에 파일이나 DB에 저장 함
  • 주로 사용자 인증시에 사용함

세션에 대한 간단한 예제

<?php
session_save_path('./session');
session_start();
$_SESSION['title'] = '생활코딩';
?>
<?php
ini_set("display_errors", "1");
session_save_path('./session');
session_start();
echo $_SESSION['title'];
echo file_get_contents('/ex.u/cep/cep/html/egoing/session/session/sess_'.session_id());
?>

로그인

<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
	</head>
	<body>
		<form action="login_process.php" method="POST">
			<p><label>아이디</label><input type="text" name="id" /></p>
			<p><label>비밀번호</label><input type="text" name="pwd" /></p>

		<input type="submit" />
		</form>
	</body>
</html>
</html>

인증

<?php
session_start();
$id = 'egoing';
$pwd = 'codingeverybody';
if(!empty($_POST['id']) && !empty($_POST['pwd'])){
    if($_POST['id'] == $id && $_POST['pwd'] == $pwd){
        $_SESSION['is_login'] = true;
        $_SESSION['nickname'] = '이고잉';
        header('Location: ./session.php');
        exit;
    }
}
echo '로그인 하지 못했습니다.';
?>

일반 웹페이지

<?php
session_start();
if(!isset($_SESSION['is_login'])){
    header('Location: ./login.html');
}
?>
<html>
    <body>
        <?php echo $_SESSION['nickname'];?>님 환영합니다<br />
        <a href="./logout.php">로그아웃</a>    
    </body>
</html>
 

로그아웃

<?php
ini_set("display_errors", "1");
session_start();
session_destroy();
header('Location: ./login.html');
?>

댓글

댓글 본문
작성자
비밀번호
  1. 살충제
    아래에 file_get_contents가 출력 안된다고 하시는 분들이 있어서 글을 남겨봅니다.
    먼저, session_basic.php와 session_basic2.php에 각각 session 파일의 저장경로가 예제에서는 ./session으로 동일하지만, 이걸 각각 다르게 바꿔보시길 바랍니다. 예컨데, session_basic.php의 session_save_path는 ./session으로, session_basic2.php의 session_save_path는 ./session2로.

    이렇게 하시면 file_get_contents의 결과가 제대로 출력이 될 겁니다.

    -
    배우는 입장이기 때문에 확답할 수는 없겠지만, 제 추측으로는 session_basic2.php에 session_save_path가 굳이 설정되어 있어야 하나 싶네요. 어차피 session_basic2.php가 세션에 저장된 값을 보여주기 위해 만들어진 파일이기 때문이기에...

    아무튼 이번 강의도 정말 잘 보고 갑니다!!
  2. zgp7777@gmail.com
    좋은 강의 감사합니다!

    일반웹페이지 코드부분 파일명을 헷갈려서 돌아왔네요 하하

    저 처럼 헷갈리시는 분들은 일반 웹페이지 저 부분 파일명을 session.php로 해두셔야 합니다.
  3. 좋은 자료 감사합니다.
  4. 허민호
    감사합니다. SESSION 때문에 고생했는데 뻥뚤렸네요
  5. JustStudy
    고맙습니다
  6. SK Kim
    인증 코드들은 별문제 없이 작동하는데 세션에 대한 간단한 예제가 강의내용 처럼 작동이 안되네요.
    $_SESSION 과 file_get_content 내용이 같이 출력이 안됨..ㅠㅠ
    댓들에도 비슷한 상황을 격는 분들이 몇분 계시네요.

    session1.php
    <?php
    session_save_path('./');
    session_start();
    $_SESSION['title'] = '생활코딩2';
    ?>

    session2.php
    <?php
    ini_set("display_errors", "1");
    session_save_path('./'); #있으면 2번 미작동, 없으면 1번 미작동
    session_start();
    echo $_SESSION['title']; #1
    //echo file_get_contents("./sess_".session_id()); #2
    ?>

    session3.php
    <?php
    ini_set("display_errors", "1");
    //session_save_path('./'); #있으면 2번 미작동, 없으면 1번 미작동
    session_start();
    //echo $_SESSION['title']; #1
    echo file_get_contents("./sess_".session_id()); #2
    ?>
  7. 어렵네요 ㅜㅜ 개념이 안잡혀요ㅠㅠ
  8. egoing
    일단 오류 메시지를 켜보세요~ php.ini display_errors 로 검색해보시면 방법이 나옵니다
    대화보기
    • ㅁㅅㅈ
      세션 정보를 보고 싶은데
      echo $_SESSION['title'];
      echo $_SESSION."</br>";
      var_dump($_SESSION);
      echo file_get_contents('./session/sess_'.session_id());
      이렇게 다 해보면 file_get_contents에서만 아무것도 안나와요
      file_get_contents를 다른 변수에 저장해서 출력해보니
      string(0) ""
      이렇게 나오는데 왜 $_SESSION으로는 읽어지는데 file_get_contents로는 안될까요....
      디렉토리 다 맞게 입력했어요ㅠㅠ
      file_exists(똑같은 경로) 찍으면 1 나오는데ㅠㅠ
    • 굴롱
      세션을 유지해두면

      다른 페이지에서 로그인 정보를 불러올 수 있나요?
    • 김종진
      이 코드 복붙하시는 분들 이 코드중에 눈에는 안보이지만 특수문자같은게들어가있습니다.
      코드 손으로 작성일일이 하시면 문제 없이 될것같네요.
    • jinho
      파이어폭스에서 세션아이디 생긴거 확인하고싶은데 어떻게 확인해야되요?? ㅠㅜ
    • ericoh
      위의 마지막 동영상 강의의 로그인, 인증, 일반 페이지, 로그아웃 파일 코드들은 개인 PC 환경의 호스팅서버에서 사용할수 있는 파일들 맞습니까?

      만약 그렇다면 외부 호스팅서버를 사용할때 어떤 코드들이 추가 되어야 하는지 알고싶습니다?

      강의 잘보고 있습니다. 늘 감사드립니다.
    • ybin
      session id라는 것이 있어서 유저마다 유니크하게 생긴다는 것은 강의를 다시 보니 설명이 나오네요.
      session id라는 것은 session_start(); 할 때마다 생성이 되는 것이라면

      제가 login.php 에서 session_start(); 를 해서 생성한 세션 정보를
      logout.php 에서 session_start();를 한후 session_destroy(); 를 하면 동일한 SID의 세션 정보가 삭제 되는 것인가요?

      그리고 session 폴더에 저장되어 있는 SID 파일들은 제가 리눅스 명령어로 삭제해되 되는 건가요?
      대화보기
      • ybin
        귱금한게요. session은 서버에 저장되는 정보이니까
        $A유저가 로구인을 해서 _SESSION['is_login'] = true로 하면. B유저가 접속하면 세션에는 true로 되어 있어서 로그인이 되어버리지 않나요?

        $_SESSION[] 안에 변수값을 유니크하게 정해줘야하지 않나요.? 아니면 그 부분은 php가 알아서 해주기 때문에
        A유저의 $_SESSION['user_id']와 B유저의 $_SESSION['user_id']는 겹치지 않는건가요?
      • 샤핀
        이고잉님 로그인세션2 강좌
        저도 코드 그대로 붙여넣어도 동작이 제대로 되지 않는데요..
        login.html -> login_process.php에서 아이디 패스워드 입력하고 제출하면

        Parse error: syntax error, unexpected ' if' (T_STRING) in C:\Bitnami\wampstack-5.4.31-0\apache2\htdocs\session\login_process.php on line 6

        아래와 같은 에러가 나는데... 브레이크 포인트 걸어도 에러부터 걸리니 디버깅도 안되고 잘 모르겠네요...

        크롬 개발자 도구에서 여기저기 뒤져 보니 if문 안에   공백 문자가 들어갔다는 거 같습니다.
        : syntax error, unexpected '\&nbsp  if' (T_STRING) in
        대화보기
        • 0132h
          강의 잘 듣고 갑니다...
          대빵. 머리에 쏙쏙 들어옵니다..!!
        • seungdols
          인증부분에서 막히네요..
        • openkwang
          중요한 토픽이네요. 체크체크
        • 수업잘듣고 있습니다.
          참! 문제가 하나 생겼는데요.
          로그인 세션에서..
          이고잉님 코드를 그대로 복사했음에도
          실행이 되지 않는건 왜일까요ㅜㅜ
          login.html-->에서 아이디 비번 넣고 제출하면..login_prosess.php 에서 멈추네요.
          주소창에 login_process.php로 찍혀요;;;;
        • 장선용
          클라이언트에서 쿠키값이 생성이 안될수도 있나요?
        • 김승익
          잘보고갑니다^^
        • Jude
          안녕하세요? 이고잉님.. 덕분에 공부 잘하고 있습니다 ^^
          다름이 아니고, 세션 예제 중에서 basic_session에서는 값이 'title' 이란 이름으로 정상적으로 저장되는데, file_get_contents로 가져오는 부분에서 출력하면 공백이 출력됩니다. session 파일명을 명시적으로 작성 후에 가져와도 아무것도 못가져오는데 어느 부분이 문제인가요??!?! (실제 세션파일에는 값이 들어있는데도요;;;)
        • egoing
          앗 그렇군요. 지금 수정했습니다. 확인 부탁드려요 :)
          대화보기
          • manorgass
            session_destroy(); 위에 session_start(); 를 입력해보세요.
            대화보기
            • manorgass
              이고잉님 로그아웃 예제에서 session_destroy()메서드는 사용 전에 session_start()메서드를 반드시 써줘야합니다. 현재 코드대로 실행할 시, session_destroy()메서드가 동작하지 않아, 세션이 그대로 유지되므로 로그아웃이 되지 않습니다. 소스수정 바랍니다.
            • 이한결
              안녕하세요.강의 잘 보았습니다.
              마지막 로그인 구현 부분 중 로그아웃 시에 자꾸 문제가 발생해서 댓글 남깁니다.문제의 원인이나 해결에 대해 생각해보려고 했지만 워낙에 코드가 단순해서 분석해볼 것도 없이 딱 막히더라구요.
              로그인 화면(login.html), 로그인 처리(login_process.php), 로그인 후(session.php) 모두 문제 없이 잘 구현됩니다만 로그인 후 화면에서 로그 아웃 버튼을 누르면 아래와 같은 오류 메시지가 뜹니다.
              ㅡㅡㅡㅡ
              Warning: session_destroy() [function.session-destroy]: Trying to destroy uninitialized session in C:\APM_Setup\htdocs\PHP\opentutorials\Session\logout.php on line 3
              Warning: Cannot modify header information - headers already sent by (output started at C:\APM_Setup\htdocs\PHP\opentutorials\Session\logout.php:3) in C:\APM_Setup\htdocs\PHP\opentutorials\Session\logout.php on line 4
              ㅡㅡㅡㅡ
              APMSETUP(http://www.apmsetup.com)의 소프트웨어를 사용해서 제 랩탑을 직접 서버로 구동시켜 공부에 사용하고 있습니다.혹시나 해서 session_save_path를 직접 설정해 세션 데이터 파일이 어떻게 되는지 살펴보기도 했는데, 생성은 정상적으로 되지만(데이터도 잘 입력 됩니다.) 역시나 로그아웃 부분에서 같은 에러가 발생합니다.
              로그인 부분이야 어차피 오픈 소스 프로그램을 이용하면 제가 자세히 들여다 볼 필요도 없는 부분이지만 괜히 찝찝해서 질문 드려요.그럼 답변 기다리고 있겠습니다.
              항상 좋은 강의 감사드려요.
            버전 관리
            egoing
            현재 버전
            선택 버전
            graphittie 자세히 보기