2012-10-08 53 views
-2

可能重複:
timed auto logout and browser close記錄的註銷時間的用戶會話超時和瀏覽器關閉的情況下

我正在儲存網站的用戶使用一個MySQL表和我能夠在登錄時使用插入查詢來捕獲和存儲登錄時間,並且如果用戶選擇通過註銷按鈕註銷,我也可以捕獲註銷時間。

但如果用戶只是關閉瀏覽器,那麼我該如何激發查詢註銷時間。

我得到了什麼到現在是這樣的,但有了這個,我可以解決的會話超時問題,但不是「瀏覽器關閉」

if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 1800)) 

    { 

    // last request was more than 30 minates ago 
     session_unset();  // unset $_SESSION variable for the runtime 
     session_destroy(); // destroy session data in storage 

    } 

    $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp 

請幫我解決了這一點..

+0

爲什麼downvote ...謹慎回覆?? –

+0

atleast如果你不能回答它,那麼請不要downvote。 –

回答

-2

當用戶關閉瀏覽器,會話將被銷燬。所以你不必毀掉它。

+0

我不想摧毀它,我正在尋找將該特定用戶的銷燬時間存儲到我的表中以分析使用情況。 –

+0

然後,您必須使用JavaScript並在用戶關閉窗口時找到調用腳本的方法。 – FrediWeber

-1

這是我測試和它的工作對我來說,當瀏覽器關閉

session_start(); 
    if (!isset($_SESSION['LAST_ACTIVITY'])) { 
     // initiate value 
     $_SESSION['LAST_ACTIVITY'] = time(); 
    } 
    if (time() - $_SESSION['LAST_ACTIVITY'] > 1800) { 
     // last activity is more than 10 minutes ago 
     session_destroy(); 
    } else { 
     // update last activity timestamp 
     $_SESSION['LAST_ACTIVITY'] = time(); 
    } 

我在這裏存儲用戶的每個胡亞蓉的時間戳。當這段時間超過30分鐘之前,我正在做註銷(銷燬會話)。

不知道是否你的應用程序允許這一點,但據我所知,這是我用在這些類型的場景

編輯,實現在看評論

關閉瀏覽器不會觸發任何之後的路請求到服務器,所以你無法知道用戶關閉了他的瀏覽器。您可以使用監聽器的方式,以使會話超時,然後存儲當前的時候,這種情況發生

當瀏覽器做在window.onbeforeunload或window.onunload

Ajax調用關閉你可以跟服務器上述

我的解決方案將允許在一些活動後的時間過期後自動註銷用戶

+0

,它只是告訴你會話在瀏覽器關閉後有時會過期,不是嗎? – HorusKol

+0

這就是我上面粘貼的內容,如果瀏覽器關閉,我正在查看數據。 –

+0

我編輯了這個@AdityaKumar –

4

有知道用戶已經關閉瀏覽器或導航網站離開到別的地方沒有可靠的方法 - 這是由於HTTP的無狀態性意味着一旦下載了內容,服務器和瀏覽器之間就不再存在連接(大部分情況下)。

你可能會使用一些ajax請求來「ping」你的服務器 - 一旦ping掉了,你可以認爲他們已經關閉了所有頁面到你的站點。這很糟糕,因爲它無用地將流量添加到網絡中,並且意味着您的服務器將處理更多的請求,從而無法獲得真正的功能增益。

+0

這是真的,但我正在尋找一些解決方法來實現這一目標.. –

+0

我建議在一個解決方法,但它是混亂的,你很想問問自己,它是否真的有必要。十分之九十九,答案是否定的。 – HorusKol

2

使用瀏覽器beforeunload事件,可減少資源使用量,減少中繼過程。

向瀏覽器beforeunload事件的服務器發送ajax請求,並插入用戶註銷時間。

一個很好的答案被SLAKSHow to capture the browser window close event? **是

每當用戶離開你的頁面 任何理由beforeunload事件觸發。

例如,如果用戶提交表單,點擊 鏈接,關閉窗口(或標籤)或使用地址欄,搜索框或書籤轉到新頁面,它將被觸發。

你可以排除用下面的代碼提交表單和超鏈接(除了其他 幀):

var inFormOrLink; 
$('a').live('click', function() { inFormOrLink = true; }); 
$('form').bind('submit', function() { inFormOrLink = true; }); 

$(window).bind("beforeunload", function() { 
    return inFormOrLink || confirm("Do you really want to close?"); 
}) 

live方法不與submit事件的工作,因此,如果您添加一個新形式,您還需要將處理程序綁定到它。請注意, 如果一個不同的事件處理程序取消提交或導航,您的 將丟失確認提示,如果窗口後來實際關閉 。您可以通過在提交和點擊事件中記錄時間並在幾秒鐘後檢查beforeunload是否發生超過 來解決該問題。

+1

直播被棄用。檢查出** ['.on()'](http://api.jquery.com/on/)** –

+0

這個答案是由斯拉克斯於09年10月27日發表的,當時'on'沒有被引入 – Champ

+0

沒有意識到這是一個報價。你應該這樣標記它。 –

1

您無法跟蹤瀏覽器的關閉。您可以跟蹤彈出或關閉選項卡。

您不能依賴beforeunload。我認爲它與瀏覽器不兼容。

相關問題