2012-05-28 4 views
3

여러 브라우저 Window/Page에 socket.io id를 사용하려고합니다. everyauth을 사용하는 SNS-auth-process이고 프로젝트는 express을 기반으로합니다. socket.io 연결을 유지socket.io의 새로운 쿠키 값이 작동하지 않습니까?

전체 아약스 메인 페이지 :

여기 내 프로젝트의 디자인입니다. 다시로드하지 않고 리디렉션을하지 않습니다.

사용자가 일부 SNS 계정을 통해 로그인을 시도하면 팝업 창이 열리고 모든auth 및 SNS Auth가 관리합니다. 팝업 창 안에는 많은 수의 리디렉션이 발생하지만 기본 창은 지속적이므로 socket.io 연결이 유지됩니다.

마지막으로 성공적인 인증 후에 모든auth는 팝업 창에서 'authdone.html'을 리디렉션합니다.

브라우저에서이 팝업 창이 더 이상 유용하지 않으므로 window.close();

성공적인 로그인 정보는 everyauth에서 얻을 수 있지만 필자가하고자하는 것은 세션 관리를 통해 명시 적 프레임 워크로 세션 관리가 정확히 필요하지 않기 때문에 제 경우 쿠키가 더 중요합니다. socket.IO.

app.get('*', 
    function (req, res) 
    { 
     console.log("----------get------------"); 
     console.log(req.url); 
     if (req.url == '/public/authdone.html') 
     { 
      console.log("----------get /public/authdone.html------------"); 
      console.log(req.cookies); 
      // express(connect) sessionID(sid) cookie available here. 
      //{ 'connect.sid': '2DLlayNx90wtTsyeq5w83N9g.Kc1ZFd8I7omf6u4fk4FFyKAt4dP1V6IufSf1ZtRudVI' } 
     } 
     onreq(req, res); 
    }); 

현재, 내가 방문 페이지 (/public/authdone.html)로 리디렉션 팝업 창에 쿠키를 통해 명시 적 sessionID와를 얻기 위해 관리하지만,이 충분하지 않습니다. 또한 쿠키에 socket.IO 지향 ID를 가져와야합니다.

사실, 여기에 혼란스러워하고 질문했습니다. Adding a cookie value on Socket.IO

감사 웨스, 나는 약간 아래 (내 경우, 일부 소켓 클라이언트 ID에) 새로운 쿠키 값을 추가 할 수있는 방법을 찾을 :이 블록에서

io.configure(function() 
{ 
    io.set('authorization', function (handshake, callback) 
    { 
     if (handshake.headers.cookie) 
     { 
      var cookie = handshake.headers.cookie; 
      var newS = ";" 
       + "socketClientID" + "=" 
       + "999999999999999";// eventually randomize for every client 
      cookie += newS; 
      console.log("========================================="); 
      console.log(cookie); 
     } else 
     { 
      return callback('Cookie not found', false); 
     } 
     callback(null, true); 
    }); 
}); 

을, 나는 쿠키 값을 추가 로 "socketClientID = 999999999999999"

그래서 CONSOLE.LOG를 통해 현재의 쿠키 출력의 지금까지

connect.sid=fc2iTJW3ETD7nIyxI5ZwpayK.S0qGhp1Ryw7Msg2r03yB6g822qVZIZTbZyWUSpQL0aU; 
socketClientID=999999999999999 

입니다 좋은 오, 그러나, everyauth 리디렉션 페이지, 에 나는 아직도

가 는
----------get /public/authdone.html------------ 
{ 'connect.sid': 'fc2iTJW3ETD7nIyxI5ZwpayK.S0qGhp1Ryw7Msg2r03yB6g822qVZIZTbZyWUSpQL0aU' } 
가 socket.IO 핸드 셰이크 단계에

에만 쿠키를 통해 얻을 수 sessionID와 (connect.sid)을 표현, 추가 된 ClientID 쿠키 값이 아닌 수 반영.

정말 도움이 필요합니다. 감사.

답변

1

좋아, 나는이 종류의 쿠키 형태 클라이언트 측을 형성 할 것을 찾아 냈다.

또는

는 클라이언트에서 방출과 socketClientID 콜백 ... io.sockets.on ('연결'기능 (클라이언트)에서 socketClientID 방출한다.

나는 클라이언트 쿠키 관리에 https://github.com/carhartl/jquery-cookie을 사용합니다.

관련 문제