2013-10-09 46 views
1

我想創建一個網站,你將通過一個會話在PHP中保持登錄,只要你留在網站上,但如果你離開網站將被註銷。例如,當您從mysite.com/index.php移動到mysite.com/otherpage.php時,您將保持登錄狀態,但在移動到othersite.com時將會註銷。這可能嗎?結束會議時,剩下的網站

到目前爲止,我已經嘗試使用ajax和jquery結束會話,當頁面被留下時,但這也會在頁面刷新時結束會話。

$(window).unload(function(){ 
     $.ajax({ 
      type: 'POST', 
      url: 'logout.php', 
      async:false, 
      data: {key_leave:"289583002"} 
     }); 
    }); 
+0

你可以添加AJAX調用到一個jQuery的「點擊」處理程序僅適用於所有的外部鏈接在您的網站上(可能會添加一個css類「外部」)。當用戶點擊另一個網站時,他們將首先從您的網站註銷。 – Will

+0

只要用戶在網頁上,就會添加一個定期點擊您的服務器的心跳,然後如果其中一個或兩個心跳錯過了,請假定他們已經離開您的網站並結束會話。在外部鏈接上執行此操作不會有效,因爲不是每個人都使用每個網站的單個選項卡。例如,我可能會在三個不同的標籤中一次打開您網站的三個不同區域。如果我離開其中一個,並且仍然在其他人身上,則自動註銷將會帶來不便。 –

+0

通常,這是通過使用會話或cookie來設置持續時間來重置每個心跳,這樣,如果在設定的持續時間內沒有發生心跳,會話或cookie會丟失,從而導致用戶被註銷。 –

回答

2

有沒有可能來檢測用戶是否離開您的網站(想象的場景時,用戶只需從互聯網上斷開,但瀏覽器仍然是開放的,或通過KILL關閉瀏覽器),所以基本上你不能做你想要的。

反正這裏是一些線索:

  1. 你爲什麼需要它呢?目標是什麼?試着重新考慮你的架構。
  2. 您可以配置session.cookie_lifetime爲0,這將意味着「直到瀏覽器關閉」
  3. 您可以在每個頁面上添加一些javascript「ping」,例如每10秒調用一次腳本,或者停止調用當網絡發生故障,用戶去了另一個網站,並沒有頁面在其他選項卡,則需要單獨的cron作業,這將破壞用戶會話,而不會坪上次
+0

我已經重新思考了我的目標,並得出這樣的結論:這實際上不是要求。感謝大家的想法,這仍然是一個有趣的場景。 – Chris

0

一個簡單的辦法是

一)在服務器端 - 如果存在會話,則從用戶最後一次訪問pag時(在服務器上)檢索數據庫即如果太久以前讓他們再次登錄。否則傳遞頁面並且不需要數據庫 b)爲了更好的用戶體驗,使用Javascript更新頁面(setTimeout)。

如果(b)不工作(即無論出於何種原因),那麼至少在服務器與個人數據一起保護