[김근호]님이 남기신 글:
>현재 php를 이용하여 로그인 처리를 하고 있는데요, 세션쪽으로
덤벼보고있습니다.
웹쪽 스크립트는 처음이라서, 많이 헤매는군요. 혹시
괜찮으시다면 조언 부탁드립니다.
>다음과 같은 부분이 이해가 되질 않는군요.
>session은 session_start()->session_register()의
과정이 필수인거 같은데요, 만약 사용자의 로그인과
패스워드를 받아들이는 html코드로부터 값을 넘겨받은 php코드에
이러한 과정을 넣고 싶을때요, 받은 값들을 갖고 DBMS에서
인증여부를 파악하고, 인증이 떨어지면, 바로 세션등록을
시켜주는것이 일반적인 코딩방법인거 같더군요(이책
저책...봤는데...그렇다라구요..
)
>그런데요... 한가지..
>session_start()는 꼭 코드의 맨 처음 <?의 바로 다음부터 나와야
하고, 이 코드에는 DBMS에 query를 던져서 결과값을 받아들이는
코드 부분이 들어가야하는데요,
그렇게 되면, session_start()와 session_register()의
부분이 떨어지게 되더라구요.. 그렇다고, 디비쪽에서 회원여부
파악하고, 그리고 인증떨어지면, session_start()..session_register()를
하니 이미 코드의 한가운데 와 있어서 그런지, 헤더가 이미
보내졌다는 오류메세지만 뿌려주는군요.
>일부 책에선 이런식으로도 구현을 해두었던데요, 사실 그 책을
보고 따라해봤는데, 되더라구요. 하지만, 또 안되는날(?)도
있구요..(그날이
오늘이군요..애효..
-.-)...
>이렇게 세션적인 부분에서 되고 안되고의 여부는 과연
무엇인가요?
>그리고, session_start()는 꼭 코드의 맨위에 존재해야한다고
하던데요, 그렇다면, 나머지 코드들은 그 사이에
못들어가는것인지요..
>session_start()야 처음에 들어간다하더라도,
session_register()만큼은
인증이 떨어진후에 줘야하는데...
>참..난감하네요..
>어떠한 식으로 세션을 통한 로그인처리를 해줄수있는건지..
>
>긴 글 읽어주시느라 감사합니다.
>
========================================
일반적으로
세션처리에 관한 과정은 따로 떨어진 독립적인 파일에서
처리하는 것이 좋습니다.
session_register() 함수를 사용하여 등록한 후에는
해당 파일에서 곧바로 세션변수를 사용할 수는 없습니다.
예를 들면,
$var = 'test';
session_register(var);
echo $_SESSION[var];
이렇하면 $_SESSION[var] 변수는 아무것도 출력되지 않습니다.
다른 파일로 한번 이동하거나 리플레쉬 해야 합니다.
그 이유는 현재 페이지에서 세션변수를 등록할뿐 현재
세션변수값은
없기 때문이죠...
서버와 클라이언트간의
데이터 흐름을 생각해 보면 왜 이런 현상(?)이
일어나는지 알 수 있을 겁니다.
그리고
session_register() 함수는 HTTP 헤더를 클라언트에게 전송함을
의미합니다.
주의할 점은 echo, print 또는 에러메시지를 포함해서
클라이언트로
무언가 어떤 메시지를 출력할때에는 이미 HTTP 헤더가
전송된다는
점을 간과해서는 안됩니다.
따라서
echo 'foobar';
session_register(var);
이런 과정은 두번의 헤더 전송을 의미하기 때문에 에러가
납니다.
꼭 echo 뿐만 아니라 session_register() 함수 이전에
어떠한 아무런 메시지 출력이 없어야 합니다. 더구나 에러
메시지를
포함해서..
정리하면
로그인 과정을 처리할 경우는 가능한 따로 별도로 떨어진 PHP
파일에서 처리하며 HTTP 헤더를 전송하기 전에 반드시
아무런 메시지 출력이 없어야 합니다.
예)
<?php
...
...로그인 관련 처리... // 에러를 포함에서 출력메시지가 없어야
함
if(인증이맞다면)
{
session_register(var);
} else {
echo "invalid user ....";
exit; // <-------------- 반드시 스크립트를 종료해야 함
}
...
...다른 처리과정...
...
header('Location: url');
exit;
?>
*PS:
스팸메일이 많이 쌓이다 보니 하마터면 지울뻔한 메일이
있었군요.
계정 발급해 주신다는 호의는 고맙지만 현재는 ...
암튼 감사합니다.
|