2012-07-05 60 views
0

我在網站上工作hwere我需要介紹安全原因,我的網站會在用戶閒置10分鐘後自動簽出用戶。行爲是在大約8分鐘不活動的時候,彈出一個jQuery UI對話框,警告用戶他們即將超時。用戶可以選擇保持登錄狀態,現在退出或者什麼都不做,並且在10分鐘結束時他們被迫退出。我通過一個javascript代碼片段實現了這一點,該代碼片斷超時(無鼠標/鍵盤事件),並在用戶做任何我認爲是「活動」的任何時候重置。網站超時而不是單個網頁

我的問題是我可以讓這個東西運行我的單個網頁,但沒有線索如何使用這個完整的域。我想到了餅乾也可以實現這個壯舉,但不是很確定。如果有人可以建議我按照我的任務採取什麼方法,那將是非常好的選擇。與代碼示例

獲取此超時腳本運行在我的完整域而不是單個網頁上。可能使用cookie或其他東西。

+0

我現在有一個數據庫中存儲會話數據。它有一個隨機MD5形式的會話ID,存儲在用戶計算機上的cookie中。基本上,數據庫中存在「到期時間」,之後會話從數據庫中刪除。 (我沒有設置cookie過期,所以當瀏覽器關閉時,它們會自動註銷)。每次加載頁面,到期時間都會在我的數據庫中更新 - 使用JQuery UI創建一個腳本,將其包含在相關頁面上,並在點擊「保持登錄狀態時讓AJAX呼叫過期更新」。 –

+0

爲什麼你不把它扔在你的模板的頭文件中的JS文件中或w/e?我認爲我必須在這裏丟失一些東西 - 如果他們點擊了一個新頁面,那麼他們不需要跨越域名,然後他們顯示活動並且新頁面上的新JS文件接管並且他們還有10分鐘? –

+0

你有沒有考慮把你的JavaScript到另一個網站文件,這是自動包括到每個網頁? – jared

回答

1

我會推薦使用JavaScript並創建完整的PHP解決方案。

這可以簡單地通過給用戶一個在每個PHP頁面上10分鐘後過期的cookie來實現。這樣,每次訪問都會更新cookie,如果他們在十分鐘後回來,Cookie將消失,系統將不再識別它們。

我還建議不要使用會話,他們可能會很容易混亂,如果要擴展到多臺機器以實現負載均衡,則幾乎不可能管理。這不是一個現實的生產工具。

每隔一頁調用一次 - 這將檢查它們是否已經有一個cookie,如果他們這樣做,它將用相同的值更新十分鐘(60秒十分鐘)。您可以將「用戶」的cookie名稱更改爲您想要的任何內容。

if(isset($_COOKIE['user'])){ 
    setcookie('user', $_COOKIE['user'], time()+60*10); 

    //put your user validation code here to make sure the cookie is real 
    //then you can put your logged in specific data under it. 
} 

授權擺在首位用戶,最有可能登錄時,你可以這樣做:

setcookie('user', $value, time()+60*10); 

如果你想登錄的人了,你可以這樣做:

setcookie('user', '', 0); 

祝你好運!

+0

是的請。我想嘗試一下。 – CodeMonkey

+0

@ user1290495新增了! – Jonathan

0

您可以通過將會話cookie設置爲10分鐘後過期來完成此操作。使用session_set_cookie_params()來設置cookie的持續時間(第一個參數)。

session_set_cookie_params(600, '/', 'www.example.com', false, false); 
session_start(); 

請確保您在session_start()之前致電。

然後,您將使用JavaScript來檢查cookie的expires參數。如果它接近過期時間,那麼您將使用相同的JavaScript向他們顯示對話框,警告他們的會話即將過期

+0

所以我可以使用它來timout ..但我將如何使用警報通知用戶8分鐘。爲此,我只需要JavaScript。對 ? 或者你是否在說我可以簡單地使用cookies並且根本不需要使用JS? – CodeMonkey

+0

你會使用JavaScript的通知,但這就是所有你需要JS的 –

+0

所以我怎麼會通知我的JS,8分鐘過去了。我是否需要2個計數器在JS中的另一個PHP中,或者JS如何知道自上一次域名頁面上的活動後8分鐘? – CodeMonkey

0

您可以使用會話和/或cookie來解決此問題。你使用它們的方式是,在你的網站的每一頁你首先檢查cookie /會話,然後才能繼續。因此,如果您的用戶僅註銷一次,並嘗試轉到網站上的其他頁面,則他/她必須首先登錄,然後才能繼續,因爲會話不再可供該用戶使用。這種

東西 -

<?php 

if($this->session->userdata('logged_in') == FALSE) 
{ 
    // Login again 
} 
else 
{ 
    // Display the page 
} 

?>