2012-11-07 66 views
0

我想知道在我的應用程序中,主要是php,這是最好的方法,以保持用戶登錄到一個網站,直到他們已經註銷。它可能是令牌,會話生活,餅乾等?保持用戶登錄的最佳方法?

目前,這是我的登錄和註銷系統是如何工作的:

當用戶登錄時,它存儲在細節上的$ _SESSION:

if (isset($_SESSION['teacherid'])) { 

     $userid = $_SESSION['teacherid']; 

    } 

if (isset($_SESSION['teacherusername'])) { 

     $username = $_SESSION['teacherusername']; 

    } 

然後在每個腳本中含有下面,說明由sessionlife持續12小時的代碼:

<?php 

ini_set('session.gc_maxlifetime',12*60*60); 
ini_set('session.gc_divisor', '1'); 
ini_set('session.gc_probability', '1'); 
ini_set('session.cookie_lifetime', '0'); 
require_once 'init.php'; 

session_start(); 

?> 

的init.php是此以下:

<?php 
session_save_path('Session'); 
?> 

現在,下一次用戶刷新頁面,會話將被銷燬12小時後,它進入註銷頁:

if ((isset($username)) && (isset($userid))){ 
     session_destroy(); 
     echo "You have been Logged Out | <a href='./home.php'>Home</a>"; 
    } 

    else { 

     echo "You are Not Logged In"; 

    } 

顯然,如果註銷頁面上的用戶點擊,然後將定位上面的腳本。

但這是做這件事的好方法嗎?有沒有更方便的方法,因爲如果您查看正確的Web應用程序,他們可以讓用戶登錄幾天,但他們如何做到這一點?

感謝

回答

7

會議將做在緊要關頭,他們有足夠的安全(雖然不可以引用我這句話),但根據服務器的使用和配置,您的會話可能會在12小時前被清除標記。

登錄後,我開始會話將cookie保存到他們的計算機。此Cookie包含一個唯一生成的字符串及其帳戶ID。

當他們刷新頁面,則運行下面的(僞):

if (session_exists) continue(); 
else if (!session_exists AND cookie_exists AND validate_cookie()) { 
    login_user_via_cookie(); 
    continue(); 
else show_login_page(); 
+0

當然使用cookie是此功能必不可少的 - 和你的餅乾可以住了一個月或更長的時間,直到刪除... + 1 – shadyyx

+0

也可用於做xss攻擊(對於黑客) – Waqas