개발 Q&A

제목 한글 데이터 검색 후 다른 액션을 할 경우 세션데이터가 삭제되는 문제
카테고리 PHP
글쓴이 정수리 작성시각 2022/09/21 15:22:38
댓글 : 4 추천 : 0 스크랩 : 0 조회수 : 4769   RSS

뷰페이지에서 이전 페이지로 이동 시

검색키워드 또는 페이지 번호를 유지하기 위해

세션을 사용하여 구현하였습니다.

문제는 리스트 페이지에서

한글 데이터를 검색한 후 다른 액션(재검색 또는 페이지 이동 등)을 하면 세션이 끊기는 문제가 발생합니다.

날짜나 영문으로 했을 경우에는 다른액션을 진행하여도 위와 같은 문제가 발생하지 않습니다.

검색 전 후로 리스트에서 all_userdata()로 찍었을 경우 저장한 세션데이터가 정상적으로 저장되고 출력되는것을 확인하였는데

한글데이터로 검색 후 페이지 이동한 곳에서 all_userdata()로 찍어보면 저장하였던 데이터들이 삭제된 것을 확인하였습니다.

컨트롤러에 $this->session->set_userdata('prevPage',current_url())을 사용하지 않으면 세션이 끊기는 문제가 발생하지는 않습니다. 

포럼에서 끊기는 문제 관련해서 session_cooki_name을 변경해보라는 글이 있어 변경도 해보았지만

해당 문제는 해결되지 않았으며 참고될만한 게시글을 찾지 못해 글을 올리게 되었습니다.

어느 부분을 확인하거나 수정해야

$this->session->set_userdata('prevPage',current_url()); 사용하여 정상적으로 기능을 구현할수 있을까요?

Ci 버전은 2점대 입니다...

컨트롤러

function List($params='')
{//리스트 페이지 출력 데이터 설정
		
	$this->session->set_userdata('prevPage',current_url());
         컨트롤러 접근하면 prevPage라는 키워드로 세션에 현재 url를 저장해놓습니다.
}

리스트 페이지에서 검색 코드
$('.land_search_btn').on('click', function(){

	var NO = $('input[name="NO"]').val();
	var NM = $('input[name="NM"]').val();

	if(SCH_OWN_NM !=''){
		location.href = urlinfo()+'cs/act/nd/List/'+NO+'/nm/'+NM;
	}
	else
	{
		location.href = urlinfo()+'cs/act/nd/List/'+NO;
	}
});

세션 검증
public function session_confirm()//로그인 유지 여부 확인
	{	
		
		$this->CI->load->helper('url');
		
		if(!$this->CI->session->userdata('name')) {
			
			echo "
			<meta http-equiv='Content-type' content='text/html; charset=utf-8'>
			<script>
			alert('연결이 끊였습니다. 로그인 화면으로 돌아갑니다.');
			window.location.href = '".base_url()."ln/ln_c';
			</script>
			";
			//redirect('ln/ln_c');
		}
	}

​
session 환경설정

$config['sess_cookie_name']		= 'cisession';
$config['sess_expiration']		= 7200;
$config['sess_expire_on_close']	= false;
$config['sess_encrypt_cookie']	= FALSE;
$config['sess_use_database']	= FALSE;
$config['sess_table_name']		= 'land_sessions';
$config['sess_match_ip']		= FALSE;
$config['sess_match_useragent']	= TRUE;
$config['sess_time_to_update']	= 300;

 

 

 

 다음글 Api 받아오는 방법 (2)
 이전글 하이브리드앱 속도 (2)

댓글

windforce / 2022/09/22 10:14:59 / 추천 0

확인해볼 만한 부분

1. 정말 한글/영문에 따라 세션이 지워지는 게 맞는지? 그렇다면 한글 검색값을 urlencode같은걸로 바꿔주면 세션이 유지가 되는가?

2. 에러 출력했을 때 출력되는 에러는 없는지? 있다면 해당 에러 해결 후 재시도

이 정도 확인해보면 해결될 것 같습니다.

정수리 / 2022/09/22 10:44:04 / 추천 0

@widforce

답변감사합니다.

말씀해주신 방법대로 테스트를 진행해보았으나

urlencode로 변환 후 세션을 저장하는 방법으로 진행 시 영어데이터를 넣어도 세션이 해제되어 버려

이전 상태로 되돌린 후 테스트를 했을 시 에는 한글 검색값만 넣었을 경우에만 세션이 해제 되었습니다.

에러 출력을 했을 때에는 아무런 에러가 출력되지 않아 난감한 상황입니다.

현재는 어쩔수 없이 php session을 사용하여 해결하였습니다.

 

windforce / 2022/09/22 14:00:38 / 추천 0

세션이 지워지는 상황에 current_url()에 무슨 값이 들어있는지 보시고 그 값을 세션에 그대로 넣어보세요 그래도 세션이 지워지는지

$this->session->set_userdata('prevPage',current_url())이 아니라

$this->session->set_userdata('prevPage','https://...') 이런 식으로요

지워지는 상황과 유지되는 상황에서 current_url()의 값에 어떤 차이가 있는지도 확인해봐야 할 것 같네요

정수리 / 2022/09/22 14:26:09 / 추천 0

@windforce

답변감사합니다.

덕분에 해결하였습니다.

말씀하신대로 $this->session->set_userdata('prevPage','https://...')$this->session->set_userdata('prevPage',current_url()) 비교해보았는데

검색값으로 들어가는 한글 값이 인코딩되어 있는 상태면 세션이 끊기는 것을 찾아냈습니다.

$this->session->set_userdata('prevPage',urldecode(current_url()));

인코딩된 값을 디코딩하여 넣어주니 끊기지 않고 정상적으로 되었습니다.

원인을 분석하는 능력이 부족하다는 느끼네요.

다시 한번 정말 감사합니다.