개발 Q&A

제목 session_destory 관련 하여 질문
카테고리 PHP
글쓴이 키위아빠 작성시각 2020/11/20 14:24:55
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 7525   RSS
class Sitecode{
    public function get_Sitecode()
    {
		if($_SERVER['REQUEST_URI'] == "/"){
			return "ERR";
		}
		else{
			$SITECODE = explode("/",$_SERVER['REQUEST_URI']);
			return $SITECODE[1];
		}
    }

    public function chk_Sitecode()
    {
		if(!empty($_SESSION['sml_Sitecode'])){
			if($_SESSION['sml_Sitecode'] != $this->get_Sitecode()){
				session_destroy();
			}
		}
    }
}

위의 코드는 세션과 Sitecode란 것을 비교하는 임의의 라이브러리를 제가 만들은 것이고요

 

class Index extends CI_Controller {

	public function __construct(){
		parent::__construct();
		$this->load->library('Sitecode');
		$this->sitecode->chk_Sitecode();
	}

	public function index()
	{

		$this->load->view('header');
		$data['SITECODE'] = $this->sitecode->get_Sitecode();
		if($data['SITECODE'] == "ERR"){
			echo "잘못된 접근입니다.";
			exit;
		}
		$this->load->view('main',$data);
		$this->load->view('footer');
	}
}

이 코드는 메인페이지에서 chk_Sitecode 를 호출하여 세션에 담긴 sitecode와 실제 sitecode가 일치하지 않으면 세션을 종료시키는 기능을 구현하고자 하는 것입니다.

 

로그인 페이지는 따로 있고 로그인 시 세션에 $_SESSION['sml_Sitecode']를 정상적으로 담고 있으며 session_destroy() 시키기 전에 

그냥 echo로 $_SESSION['sml_Sitecode'] 값과  $this->get_Sitecode() 값을 찍어보면 정상적으로 잘 나타납니다.

하지만 새로고침하면 if($_SESSION['sml_Sitecode'] != $this->get_Sitecode()) 일때만 session_destroy를 걸어놓앗음에도 불구하고

둘의 값이 같을 때에도 세션이 계속해서 날아가는 상황입니다... 

 

도대체 어디서 session_destroy를 시키고 있는건지 if문에 session_destroy 대신 echo로 Y/N을 찍어보면 계속 새로고침해도 정상적으로 나오는데 왜 session_destroy만 집어넣으면 if문 상관없이 계속 세션이 날아가는지 도저히 모르겠습니다 ㅠㅠ 도움을 부탁합니다

 다음글 system/core/Utf8.php 89에서 Seve... (1)
 이전글 db연결 관련 질문입니다. (3)

댓글

변종원(웅파) / 2020/11/20 14:47:14 / 추천 0
새로고침할때 빈 세션이 중복으로 생성되고 있을 수도 있습니다. 체크해보세요.
키위아빠 / 2020/11/20 15:17:16 / 추천 0
public function chk_Sitecode()
    {
		if(!empty($_SESSION['sml_Sitecode'])){
			if($_SESSION['sml_Sitecode'] != $this->get_Sitecode()){
				//session_destroy();
				return "잘못된접근";
			}
			else{
				return "정상";
			}
		}
		else{
			return "정상";
		}
    }

이와같이 session_destroy만 주석걸고 return값을 찍어보면 새로고침해도 "잘못된접근"쪽으로는 전혀 찍히질 않습니다..

세션도 정상적으로 유지되구요.  destroy만 넣으면 if문에 걸러지지 않고 항상 세션이 날아가네요 ㅠㅠ

한대승(불의회상) / 2020/11/20 18:11:22 / 추천 0

일단 2개 값을 출력해서 정상적인지 확이부터해 보세요.

echo $_SESSION['sml_Sitecode'];
echo $this->get_Sitecode();

 

QIO™ / 2020/11/21 04:25:53 / 추천 0

우선 CI에서 segments함수가 있는데 굳이 explode함수를 사용한것이 궁금하구요.

생성함수 construct에서 chk_Sitecode함수를 호출하는것이 맞는지도 의문입니다.

세션이 날아간다는현상을 봐서는 아마도 오류가 있다면 여기서 발생한것 같습니다.

세션 생성 시점과 비교하려는 값이 생성되는 시점의 차이(?)에서 발생한 문제가 아닐까 생각됩니다.

CI에서 세션 이벤트(생성, 변경, 소멸)를 처리할 수 있는 방식을 제공하면 좋겠다는 생각을 항상하고 있는 일인 ^^