有辦法讓客戶端上的相同socket.io連接,如果用戶打開一個新頁面或刷新頁面,可能存儲在會話插座或者這是不可能的?Socket.io保持對客戶端連接時,客戶端刷新或打開新的一頁
回答
這是不可能的。頁面更改或刷新時,不能保持相同的socket.io或webSocket客戶端連接。瀏覽器根本就沒有這樣做。當加載新頁面或刷新當前頁面時,前一頁中的所有資源都將被瀏覽器關閉並釋放,包括socket.io/webSocket連接。
所以,你的服務器有期待新加載的頁面新socket.io連接。如果您使用cookie或服務器端會話對象,則可以在服務器上識別何時從先前看到的客戶端連接到服務器,然後服務器可以相應地採取行動,以便意識到這只是以前的客戶端重新連接在新的頁面上。
爲什麼downvote?如果你認爲這是錯誤的,那麼請將主機頁面更改爲其他頁面時,確保如何保持socket.io連接處於打開狀態。 – jfriend00
以下內容如何:在客戶端上存儲cookie並在服務器上存儲曾連接到應用程序的客戶端對象列表。在客戶端的連接事件中,檢查cookie值是否在瀏覽器中設置,以及之前連接的客戶端是哪個。由於重放攻擊,這對於真實世界的實現可能是一個問題,但取決於系統應該做什麼,它仍然是一個可行的解決方案。沒有? – FedericoCapaldo
@FedericoCapaldo - 您的Cookie方案通常稱爲會話,並且是大多數服務器如何從一個頁面跟蹤客戶端 - 這就是Cookie的用途。它可用於常規的http請求或傳入的webSocket請求(所有webSocket連接都以http請求開始,因此它們在連接時獲取cookie)。如果您使用express與node.js,那麼會有快速會話模塊爲您執行大量的會話管理工作,並創建這些會話的列表並自動將它們與每個基於Cookie的傳入連接關聯。 – jfriend00
- 1. socket.io客戶端重新連接超時
- 2. Socket.io客戶端在Azure主機上保持重新連接
- 3. socket.io客戶端不連接
- 4. 如何從客戶端斷開連接並重新連接socket.io?
- 5. 客戶不handshaken客戶端應該重新連接,socket.io集羣
- 6. 當客戶端斷開連接時保持服務器打開
- 7. 客戶端重新連接
- 8. SignalR客戶端斷開/連接每頁刷新。 ASP.NET MVC
- 9. 保持客戶端對象模型連接打開
- 10. 保持一個連接爲每個客戶端打開php
- 11. Socket.io警告:客戶端不握手客戶端應重新連接
- 12. Socket.io日誌(客戶端不握手客戶端應該重新連接)
- 13. Node.js和socket.io - 客戶端不握手客戶端應重新連接
- 14. socket.io確保客戶端重新連接狀態
- 15. 帶apache的Socket.io - 套接字客戶端1 id刷新連接的客戶端2
- 16. Socket.io - 客戶端斷開後手動重新連接
- 17. 客戶端socket.id刷新?
- 18. 刷新客戶端資源
- 19. 客戶端到客戶端的連接?
- 20. c#服務器客戶端,客戶端不重新連接
- 21. 多個socket.io客戶端連接 - 強制新連接
- 22. 客戶端斷開連接
- 23. Socket.IO socket.id更改爲同一客戶端,無需重新連接
- 24. 客戶端的Socket.IO
- 25. socket.io斷開連接事件,客戶端斷開連接檢測
- 26. socket.io客戶端如何進行連接
- 27. socket.io-客戶端連接,但不發光
- 28. Socket.io客戶端未連接服務器
- 29. 新客戶端在Paho Java客戶端連接時的回撥函數
- 30. 重新連接斷開連接的客戶端套接字
抱歉,我有一個問題,導致客戶端每次連接到我的socket.io他得到一個新socket.id,我想,以確定用戶發送消息僅從該客戶所有打開的連接時間,所以我搜索一下,我可以用socket.io房間解決我的問題 – John
這是正確的。每個新連接都會獲得一個新ID。如果你想要一個持久的引用來標識一個用戶,你應該在新連接時使用一個在'socket.request.headers.cookie'中可用的cookie,並且你可以使用socket.io中間件來設置一個cookie不存在。或者,您可以使用諸如express-session之類的更常規的持久會話,然後再從socket.io訪問它。 – jfriend00