[세션]브라우져 종료해도 세션이 남아있어 다시 브라우져 켜도 로긴상태인경우
페이지 정보
본문
나 php 공부한다~*(http://cafe.daum.net/phplove)의 ASinz 님의 글을 퍼 왔습니다.
========================================================
어제 가입했고요.~ ^^ 세션문제 때문에 들어왔지만서도 해결을 봣습니다. 암튼 이민우 님이 여기 팁에 테크에 올리신 글을봤는데[php스쿨서퍼온거]. 좀 어렵더라고요.. 이해도 약간 안가고해서..
제가 여기 저기서 알아내 올립니다..
[세션만 가지고 로긴하는 방법을 이용할경우..]
이세션때문에 일주일동안 삽질했습니다.. 여기저기 뒤지고 다니면서 몇가지 알아내봤고.. 해결방안도 좀알아냈습니다..
현재 php버전들이 4.2 까지도 세션에관련 버그가 있다고하네요 php.net에서도 인정한 버그고 아직까지 고쳐지지 않은것 같습니다.
잘되는 사람도 있고 그렇지 않은 사람도 있다는데.... 암튼..~~
증상은 브라우저를 종료하고 다시접속하면 세션이 새로생성이 안되고 원래있던세션을 읽어와서 로긴상태를 유지한다는겁니다..
[마치 쿠키같이 쿠키는 time()을 0으로주거나 -1 하면 브라우져종료와 같이 죽습니다만..이건 죽지도 않아요.. 심지어 서버를 재부팅해봐도 그대로입니다.
/tmp디렉토리에서 확인해 봤습니다..
엄청나지요..
우선 호스팅하시는 분들이 가장 많이 이런증상이 나타나고요..
저는 자체서버가있는데.. 아이피로 접속하면[예 221.231.22.43/login.php 이런식으로]문제 없이 브라우져종료하면 담에 다시접속할때 로그아웃상태입니다..
정말 신기해요..
[참고로 서버는 리눅스이고요 php4.0.5 입니다.]
문제는 dns서버를 이용하여 아이피는 같지만 웹주소가 틀린것들을 이용할경우[웹 호스팅하는 경우죠..] 전혀 안먹히고 아이피를 이용해서 로긴을 할수도 없다는겁니다.
그래서 php스쿨 디져봤더니. 로긴소스를 세션만 쓰지말고 쿠키랑 같이 쓰라고 하더군요..[해봤더니 잘됩니다..^^]
소스 공개##########[php스쿨에서 흑심품은연필 님이 올려주신 소스입니다.]########
쿠키를 구울때 id와 password를 함께 합쳐서 구워버리더군요.. 그소스를 약간수정했습니다.^^
-----------------------------------------------------
<input로 넘어온 사용자 비밀번호와 사용자 id를 특정문자(::)로 붙여서 세션 tata을 등록한다
그리고 쿠키에 id를 저장한다
그런후에 로그인 체크할때는
세션값을 ::를 기준으로 나눈 두번째 값(아이디) 와 쿠키를 비교한다
%이것을 소스로 표현!! --------------->
먼저 넘오온 아이디랑 비밀번호를 디비에 연결 id와 비밀번호가 맞는지 확인한후에..
<?
$connect=dbConn();
$result = mysql_query("select id,password from $member where id = '$id' and password='$passwd'");
$num = mysql_num_rows($result);
if($num) // password 일치 검사
{
$row = mysql_fetch_array($result);
$ad = $row[id];
$haha = $row[password];
#세션과 쿠키를 만들어낸다
session_start();
# 세션값을 만들어낸다
$tata = $haha."::".$ad ;
# loginid 라는 쿠키에 ad라는 값을 넣는다
# 쿠키의 지속시간을 0으로 해서 웹브라우저를 닫으면 없어지게 만든다
setcookie ("loginid", "ad", 0, "/");
# 세션 등록한다
session_register(tata);
echo "완료";
}
?>
이것을 확인하는 방법
<?
session_start();
if($HTTP_SESSION_VARS["tata"]){ // 세션 tata가 존재하면.....
# 세션tata 의 값(haha::ad)를 :: 을 기준으로 나눈다
$SESSION = explode ("::",$HTTP_SESSION_VARS["tata"]);
# 세션tata 값을 :: 으로 나눈것의 두번째 문자 ad를
# 쿠키 loginid 값과 비교한다
if($SESSION[1] == $HTTP_COOKIE_VARS["loginid"]){ //쿠키 값과 같다면
echo "로그인 되었당";
}else{
# 비교했는데 틀리면 세션tata를 지운다
session_unregister(tata);
session_destory();
exit;
echo "로그인 않되었당";
}
}else{
echo "로그인 않되었당";
}
?>
========================================================
어제 가입했고요.~ ^^ 세션문제 때문에 들어왔지만서도 해결을 봣습니다. 암튼 이민우 님이 여기 팁에 테크에 올리신 글을봤는데[php스쿨서퍼온거]. 좀 어렵더라고요.. 이해도 약간 안가고해서..
제가 여기 저기서 알아내 올립니다..
[세션만 가지고 로긴하는 방법을 이용할경우..]
이세션때문에 일주일동안 삽질했습니다.. 여기저기 뒤지고 다니면서 몇가지 알아내봤고.. 해결방안도 좀알아냈습니다..
현재 php버전들이 4.2 까지도 세션에관련 버그가 있다고하네요 php.net에서도 인정한 버그고 아직까지 고쳐지지 않은것 같습니다.
잘되는 사람도 있고 그렇지 않은 사람도 있다는데.... 암튼..~~
증상은 브라우저를 종료하고 다시접속하면 세션이 새로생성이 안되고 원래있던세션을 읽어와서 로긴상태를 유지한다는겁니다..
[마치 쿠키같이 쿠키는 time()을 0으로주거나 -1 하면 브라우져종료와 같이 죽습니다만..이건 죽지도 않아요.. 심지어 서버를 재부팅해봐도 그대로입니다.
/tmp디렉토리에서 확인해 봤습니다..
엄청나지요..
우선 호스팅하시는 분들이 가장 많이 이런증상이 나타나고요..
저는 자체서버가있는데.. 아이피로 접속하면[예 221.231.22.43/login.php 이런식으로]문제 없이 브라우져종료하면 담에 다시접속할때 로그아웃상태입니다..
정말 신기해요..
[참고로 서버는 리눅스이고요 php4.0.5 입니다.]
문제는 dns서버를 이용하여 아이피는 같지만 웹주소가 틀린것들을 이용할경우[웹 호스팅하는 경우죠..] 전혀 안먹히고 아이피를 이용해서 로긴을 할수도 없다는겁니다.
그래서 php스쿨 디져봤더니. 로긴소스를 세션만 쓰지말고 쿠키랑 같이 쓰라고 하더군요..[해봤더니 잘됩니다..^^]
소스 공개##########[php스쿨에서 흑심품은연필 님이 올려주신 소스입니다.]########
쿠키를 구울때 id와 password를 함께 합쳐서 구워버리더군요.. 그소스를 약간수정했습니다.^^
-----------------------------------------------------
<input로 넘어온 사용자 비밀번호와 사용자 id를 특정문자(::)로 붙여서 세션 tata을 등록한다
그리고 쿠키에 id를 저장한다
그런후에 로그인 체크할때는
세션값을 ::를 기준으로 나눈 두번째 값(아이디) 와 쿠키를 비교한다
%이것을 소스로 표현!! --------------->
먼저 넘오온 아이디랑 비밀번호를 디비에 연결 id와 비밀번호가 맞는지 확인한후에..
<?
$connect=dbConn();
$result = mysql_query("select id,password from $member where id = '$id' and password='$passwd'");
$num = mysql_num_rows($result);
if($num) // password 일치 검사
{
$row = mysql_fetch_array($result);
$ad = $row[id];
$haha = $row[password];
#세션과 쿠키를 만들어낸다
session_start();
# 세션값을 만들어낸다
$tata = $haha."::".$ad ;
# loginid 라는 쿠키에 ad라는 값을 넣는다
# 쿠키의 지속시간을 0으로 해서 웹브라우저를 닫으면 없어지게 만든다
setcookie ("loginid", "ad", 0, "/");
# 세션 등록한다
session_register(tata);
echo "완료";
}
?>
이것을 확인하는 방법
<?
session_start();
if($HTTP_SESSION_VARS["tata"]){ // 세션 tata가 존재하면.....
# 세션tata 의 값(haha::ad)를 :: 을 기준으로 나눈다
$SESSION = explode ("::",$HTTP_SESSION_VARS["tata"]);
# 세션tata 값을 :: 으로 나눈것의 두번째 문자 ad를
# 쿠키 loginid 값과 비교한다
if($SESSION[1] == $HTTP_COOKIE_VARS["loginid"]){ //쿠키 값과 같다면
echo "로그인 되었당";
}else{
# 비교했는데 틀리면 세션tata를 지운다
session_unregister(tata);
session_destory();
exit;
echo "로그인 않되었당";
}
}else{
echo "로그인 않되었당";
}
?>
- 이전글루틴이 완료되는 시간 계산 21.02.09
- 다음글글자 자르기...한글처리 21.02.09
댓글목록
등록된 댓글이 없습니다.