CI 묻고 답하기

제목 session 질문이요~(2)
글쓴이 앙마 작성시각 2014/04/04 16:50:56
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 13512   RSS
ajax로 컨트롤러를 탔을 시 세션을 만들어줬습니다

$this->session->set_flashdata('clickUserId', 'value');

그런 후 ajax로 다른 일 처리가 성공적으로 완료됐을 경우 화면을  

location.reload(true);로 다시 불러왔는데

이렇게 해도 session은 생기지가 않네요

비동기로 했을 경우 세션은 생성되지 않는다는데 비동기로는 세션을 생성할 수 있는 방법이 전혀 없는 걸까요?

jquery 세션을 사용해야 하나--a

일단 세션이 생긴 후 화면이 한 번 리로드 되야합니다
 다음글 좀 도와주세요..오라클 CLOB 문제입니다. (2)
 이전글 session 질문이요~ (4)

댓글

letsgolee / 2014/04/07 09:14:32 / 추천 0
 flashdata는 다음에 지워지는 세션변수이므로 다음 처리시에 불러오지 못할 수 있습니다. userdata를 사용하는 것이 좋을 듯합니다. 세션은 서버상에서 생성하는 것이므로 비동기와 상관이 없을 듯합니다. 다음은 간단한 세션 테스트 코드입니다.

controllers에 저장할 파일:
1. session_test.php
[code]
<?php defined('BASEPATH') OR exit('Strange access!');
 
class Session_test extends CI_Controller {
 
function __construct()
{
parent::__construct();
 
// codeigniter 2.x.x에서는 load->library('session')을 사용할 것
// $this->load->library('session');
$this->load->driver('session');
 
$this->load->helper('url');
}
 
function index()
{
$this->load->view('ajax_session_test');
}
 

[/code]

2. ajax_session_test.php
[code]
<?php defined('BASEPATH') OR exit('Strange access!');
 
class Ajax_session_test extends CI_Controller {
 
function __construct()
{
parent::__construct();
 
// codeigniter 2.x.x에서는 load->library('session')을 사용할 것
// $this->load->library('session');
$this->load->driver('session');
}
 
function index()
{
if (! $this->input->is_ajax_request()) {
echo 'Not a ajax request!';
return;
}
 
if (strtoupper($this->input->server('REQUEST_METHOD')) == 'GET') {
echo $this->session->userdata('data');
return;
} else {
$this->session->set_userdata('data', $this->input->post('data'));
echo $this->session->userdata('data');
return;
}
}
}
[/code]

views에 저장할 파일:
1. ajax_session_test.php
[code]
<!DOCTYPE html>
<html>
<head>
<title>비동기 세션 테스트</title>
<script  src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
function set_data()
{
$.ajax({
url: '<?php echo site_url();?>ajax_session_test',
type: 'POST',
data: {
data: $('#input-text').val()
}
}).done(function(response) {
alert(response);
});
}
 
function get_data()
{
$.ajax({
url: '<?php echo site_url();?>ajax_session_test',
type: 'GET'
}).done(function(response) {
alert(response);
});
}
</script>
</head>
<body>
 
<form>
<input type="text" id="input-text"/> <button type="button" Set</button> <button type="button" Get</button>
</form>
 
</body>
</html>
[/code]

그리고 서버상에서 session_test를 불러와서 테스트하면 됩니다. 주의할 것은 세션을 로드할 때 저는 codeigniter 3.0b를 쓰고 있으므로 위의 소스로 했고, 2.x.x 버젼을 사용하면 $this->load->library('session')을 사용하여야 합니다.