2012-12-07 7 views
0

컨트롤러 동작에서 배열 세션을 초기화하고 값을 삽입합니다. 이러한 값은 클라이언트 측에서 아약스를 통해 전달되므로 이러한 값을 배열에 삽입하는 동안 페이지가 새로 고쳐지지 않습니다. 그러나 정의 된 동일한 세션에 삽입하는 대신 새 세션을 초기화 할 때마다 놀랍게도 새로운 세션을 초기화합니다. 여기값은 세션 배열에 저장되지 않습니다.

컨트롤러 내 코드 세션이 때마다 다시 초기화됩니다 당신이보고있는 행동을 설명 할 아약스

var myobj={tag:"mytag"}; 
$.ajax({ 
    url: 'ips/receive_tags', 
    type: 'post', 
    contentType: 'application/json; charset=UTF-8', 
    accept: 'application/json', 
    dataType: 'json', 
    data:JSON.stringify(myobj), 
    success: function(res) { 
     if (res.ImportResponse !== void 0) { 
      console.log('Success: ' + res); 
     } else if (res.Fault !== void 0) { 
      console.log('Fault: ' + res); 
     } 
    }, 
    error: function() { 
     console.error('error!!!!'); 
    } 
}); 
+0

을 작동 내 아약스 기능입니다. 아무도 들여 쓰기 전의 코드를 읽고 싶지 않습니다. – meagar

답변

1

마지막으로 나는 알아 냈다. 문제는 아약스 호출을 보내기 전에 토큰에 대한 요청 헤더를 설정하지 않아서 Rails가 토큰없이 데이터를 수신했기 때문에 모든 요청에 ​​대해 새로운 개체라고 가정했다. 요청 헤더가

beforeSend: function(xhr) { 
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); 
} 

를 추가 설정 .TO here 자세한 내용을보실 수 있습니다 아래의 코드를 들여하십시오

var myobj={tag:"mytag"}; 
$.ajax({ 
url: 'ips/receive_tags', 
type: 'post', 
contentType: 'application/json; charset=UTF-8', 
accept: 'application/json', 
dataType: 'json', 
data:JSON.stringify(myobj), 
beforeSend: function(xhr) { 
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); 
} 
success: function(res) { 
    if (res.ImportResponse !== void 0) { 
     console.log('Success: ' + res); 
    } else if (res.Fault !== void 0) { 
     console.log('Fault: ' + res); 
    } 
}, 
error: function() { 
    console.error('error!!!!'); 
} 
}); 
+0

흥미 롭습니다. 나는 이걸로 들어 본 적이 없지만 계속 염두에 두어야 할 것이 있습니다. 다행 이군. –

1

브라우저에서 쿠키를 저장하지 않는 것처럼이 소리,

def receive_tags 
    parser = Yajl::Parser.new 
    @hash = parser.parse(request.body.read) 
    log=Logger.new(STDOUT) 
    log.error(@hash) 
    session[:tags]||=[] 
    session[:tags] << @hash["tag"] 
    unless session[:tags].empty? 
    log.error(session[:tags]) #this keeps printing the current value i was expecting it to print a list of values including the previous 
    end 
    render :nothing=>true 
end 

입니다 . 이를 확인하려면, 당신은 당신의 행동에

print "Session ID: #{request.session_options[:id]}" 

을하고 각 요청에 대한 세션 ID를 변경하면 볼 수 있습니다. 그렇다면 브라우저 개인 정보 설정을 확인하고 쿠키를 저장하고 있는지 확인하십시오.

+0

세션 ID가 계속 변경되어 특정 현재 값을 인쇄합니다. – katie

+0

그리고 방금 브라우저 설정을 확인하고 쿠키를 저장하며 파이어 폭스를 사용하고'Firefox는 기록을 기억합니다 '라고 말합니다. 사용자 환경에서 시도 했습니까? 너에게 효과가 있니? – katie

+0

예,'session [: spike] || = []' 'session [: spike] << params [: spike_param]'은 잘 작동합니다.'params [: spike_param]'을 정확하게 추가합니다. 다른 브라우저를 사용해 보거나 Firefox 환경 설정> 개인 정보로 이동하여 개별 쿠키 제거를 클릭하십시오. 여기에서 "localhost"를 검색하면 응용 프로그램에 대한 것이 있어야합니다. –

관련 문제