선생님을 위한 프로그래밍 수업

쿠키와 세션

토픽 선생님을 위한 프로그래밍 수업 > 웹 애플리케이션 만들기 > 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. 수업을 듣고 MYSQL로부터 확인하여 로그인 인증을 해보았는데 계속 실패입니다.
    <?php
    session_start();
    $conn = mysqli_connect("127.0.0.1", "root", "암호", "데이터베이스네임");

    $input_email=$_POST['email']; //input의 name="email"
    $input_password=$_POST['password'];//input의 name="password"

    //아이디가 있는지 검사
    $query = "select * from user where email='$input_email'"; //테이블네임 user
    $result = $connect ->query($query);

    //아이디가 있으면 비밀번호 검사
    if(mysqli_num_row($result)==1){
    $row=mysqli_fetch_assoc($result);

    //비밀번호가 맞다면 세션검사
    if($row['password']==$input_password) {
    $_SESSION['userid']=$input_id;
    if(isset($_SESSION['userid'])){
    header('Location: /BExerci50122.html');
    //echo "로그인 성공!</br>";
    //echo $_SESSION['firstName']." 님 환영합니다.</br>";
    } else {
    echo "로그인실패";
    }
    }else{
    echo "로그인 정보가 잘못되었습니다.";
    }
    }else{
    echo "로그인 정보가 잘못되었습니다.";
    }
    ?>
    어디가 잘못되었는지 알려주시면 감사하겠습니다.
  2. 드림보이
    2022.01.21. 쿠키와 세션 파트 수강완료
  3. ggyuker
    2022-01-20 수강완료
  4. ggyuker
    2022-01-13 2번째 영상까지만 수강완료
  5. 뭉치우석
    감사합니다. 이 짧은 영상 보면서도 졸음을 이기지 못 할 때가 있지만, 나긋나긋한 목소리 들으면서 공부합니다. 이고잉 님 살아계시죠? 너무 과거 영상만 제가 보고 있나 싶어서요 ㅎㅎㅎ
  6. 아무 것도 모르던 제가 일년 동안 <생활코딩>으로 하나씩 배워가며 겨우 만든 저의 개인 홈페이지.
    마지막에 로그인/어드민 페이지로 고생했는데, 결국 초기 에 했던 여기 <세션> 강의를 3번 반복하여 끝내 논리를 알게 되어,, 홈페이지 제작 마무리.
    생활코딩님, 감사합니다.
  7. jeisyoon
    2021.08.02 Cookie & Session - OK
  8. 미댈
    두번째 영상에서
    1. php.ini 파일에 session.save_path = "저장할 경로" 입력후 서버 재시작
    (저의 경우 session.save_path = "C:\Bitnami\wampstack-7.3.16-2\apache2\htdocs\session" 를 입력함)

    2. session_basic2.php
    <?php
    ini_set("display_error", "1");
    // session_save_path('./session/tmp2');
    session_start();
    echo $_SESSION['title'].'<br/>';
    // echo file_get_contents('./session/sess_'.session_id());
    $target = include('sess_'.session_id());
    echo $target;
    ?>

    file_get_contents() 함수가 확장자가 없는 파일의 내용을 읽어오지 못하는 듯하여
    대신 include를 사용했습니다.
  9. 갓규
    file_get_contents()를 쓸때 쿠키정보가 서버로 넘어가지 않는다고 하네요.
    보이게 하려면 쿠키정보를 수동으로 넘기면 될꺼같네요
  10. 이이이
    이거 예제가 안되는거 해결했는데
    혹시나 저랑 같은 이유로 안되시는분들 계실까봐 해결방법 남겨봅니다

    일단 깔려있는 Bitnami\wampstack-7.1.27-1\php 경로로 가셔서
    php.ini 파일을 여시고 찾기로 session.save_path 를 찾으셔서
    session.save_path = "저장하실경로" 로 수동으로 지정해 주니까
    예제가 되네요 ㅎㅎ
  11. 홍콩돼지
    저도 그랬는데용
    디렉토리를 자동으로 안만들어주기때문에 수동으로 만들던지 있는지 체크하고 mkdir로 만들어둬야합니다!
    대화보기
    • 웅이
      저도 이거 똑같은 문제인데 누가 해결방법 아시는분 계신가요 ~
      1년이나 아무도 답안해주는건 너무한거 아닙니까 ㅠㅠ
      대화보기
      • 말봉
        전 왜 파라미터 하면 값이 오지 않을까요 훔
      • truelight
        저 코드를 그대로 복사 붙여넣기 할 경우 글 속에 숨겨진 HTML 태그까지 같이 복사되어 오류가 납니다.
      • Hyung Jun Choi
        마지막 파일 4개로 하는 예제에서.. 코드 복붙하면 작동안하는 경우가 있네요. (각종 변수명은 제 환경에 맞춰 부분적으로 수정만 했을 경우)
        그래서 모든 코드를 직접 다시 타이핑해서 돌려보니 정상작동하네요.

        복붙하셔서 부분적으로 고치신 분들, 작동 안한다면 직접 다 쳐보세요 ㅎ
      • 자바스크립트에서 쿠키저장하고 php에서 읽어 올수 는 없나요?
      • bell
        안녕하세요. 열심히 따라하는 중에 문제가 발생하여 댓글 남깁니다.
        html 페이지에서 id와 pw를 입력받은 후 로그인을 하면 login.php가 실행되는 부분에서 session_start() 함수에 대해 다음과 같은 오류가 납니다.
        Warning: session_start(): open(\session\sess_qqjp8ap084iurl1pve5vp576or, O_RDWR) failed: No such file or directory (2) in D:\BitNami\apache2\htdocs\session\login.php on line 4

        Warning: session_start(): Failed to read session data: files (path: \session) in D:\BitNami\apache2\htdocs\session\login.php on line 4
        login fail

        찾아보니 session 폴더에 대한 권한 문제 같아서 권한 수정도 해보고 아니면 777로 mkdir도 해보았지만 해결되지 않았습니다.

        혹시 다른 원인이 있거나 해결방법이 있다면 알려주시면 감사하겠습니다!
      • MayD
        강의 감사합니다!
      • 파인만씨는농담을좋아해
        좋은 자료 감사합니다 ~
      • 다시시작
        완료
      • 석구리
        처음 session 예제에서 저도 file_get_contents 내용이 하나도 안 나옵니다.
        session_save_path 부분을 주석 처리하면 세션 파일 내용은 나오는데 $_SESSION 접근이 안되네요.
        file_exists, is_readable, filesize 다 정상적으로 작동해서 파일이 읽혀야 하는데 내용 문자열만 안 넘어오네요.
        그냥 해당 폴더에 다른 파일 만들어서 읽어보면 정상작동하구요.
        이거 세션 파일만 안에 못 읽어보도록 되어 있나요?
        이거 어떻게 해결해야 하죠?
      • meek
        마지막 로그인 예제 해보는데

        페이지가 작동하지 않습니다.
        현재 localhost에서 요청을 처리할 수 없습니다.
        HTTP ERROR 500
        라는 에러가 뜨네요 ㅜㅜ

        좋은 강의 오늘도 감사드립니다.
      • sheis
        잘 봤어요^^
      • dongdong
        수업 듣다가 궁금한게 있어 질문드립니다 session.php 에서
        if( !isset($_SESSION['is_login']) )
        {
        header( 'Location: ./login.html');

        }
        이 코드를 쓰는 이유가 무엇인가요? 제 생각엔 $_SESSION['is_login']의 값은 항상 존재하니까 !isset함수는 false가 되고 로그아웃에 실패할 일은 없어 location 구문이 실행 될 일이 없다고 생각되는데 왜 쓰는건가요?
      • 김세창
        잘배워갑니다~!! 세션!! ㅎㅎ 쿸키!! ㅎㅎ
      • php가 첫취업?
        세션 은근히 이해하기 어렵네요 ㅜㅜ
      • 강습생
        echo file_get_contents('/ex.u/cep/cep/html/egoing/session/session/sess_'.session_id());
        ->
        echo file_get_contents('./session/sess_'.session_id());
      • 살충제
        아래에 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가 세션에 저장된 값을 보여주기 위해 만들어진 파일이기 때문이기에...

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

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

        저 처럼 헷갈리시는 분들은 일반 웹페이지 저 부분 파일명을 session.php로 해두셔야 합니다.
      • 좋은 자료 감사합니다.
      • 허민호
        감사합니다. SESSION 때문에 고생했는데 뻥뚤렸네요
      • JustStudy
        고맙습니다
      • 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
        ?>
      • cham
        어렵네요 ㅜㅜ 개념이 안잡혀요ㅠㅠ
      • 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 파일명을 명시적으로 작성 후에 가져와도 아무것도 못가져오는데 어느 부분이 문제인가요??!?! (실제 세션파일에는 값이 들어있는데도요;;;)