2014-04-09 3 views
4

장바구니를 구현하려고합니다. 데이터베이스에 session_id를 저장하고 장바구니에있는 관련 제품을 저장합니다. 로그인 후 동일한 세션을 갖고 session_id에 액세스하여이 제품을 사용자와 연결할 수 있습니다. 그러나 session_id는 로그인 한 후에 다른 것으로 보입니다. 어떻게 이런 동작을 방지 할 수 있습니까 (Warden이이 작업을 수행한다고 생각합니다), 아니면 틀린 경우 어떻게 구현해야합니까? 여기에 내 코드의 일부는 다음과 같습니다로그인 후 Devise - session_id가있는 장바구니가 변경됨

이 필터

def create_session 
    session_id = request.session_options[:id] 
    if session_id 
    session = Session.find_or_create_by_session_id(session_id) 
    if session.user_id && !user_signed_in? 
     session.update_attribute(:user_id, nil) 
    end 
    end 
end 

전에에서 application_controller에 그리고이 인증 후 필터 이전에

def update_user_session 
    session_id = request.session_options[:id] 
    user_id = user_signed_in? ? current_user.id : nil 

    session = Session.find_by_session_id(session_id) 
    if (session && session.user_id.nil?) 
    Session.delete_all(user_id: user_id) 
    session.update_attribute(:user_id, user_id) 
    end 
end 

답변

0

로그인 할 때마다 세션 ID를 변경해야합니다. 이는 보안상의 이유로 발생합니다. 세션에 대해 더 공부하면 일시적인 데이터를 세션에 저장하면 안됩니다. 특정 세션에 대해 일부 제품을 저장해야하는 경우 세션 ID에 해당하는 대신 해당 사용자 ID에 해당하는 항목을 저장하지 않는 것이 좋습니다. 사용자가 로그인하기 전에 장바구니가있는 경우 사용자가 로그인 한 후 사용자가 사용할 수 있도록하려면 먼저 브라우저 로컬 데이터베이스에 장바구니를 저장 한 다음 사용자가 로그인 한 후 결과를 서버로 전송해야합니다 귀하의 질문에 답변 해 주시기 바랍니다. 추가 질문은 언제든지 물어보십시오.

관련 문제