2012-02-03 34 views
12

tôi đã tạo một dự án bằng PHP, trong đó tôi đang quản lý các phiên.cách hết hạn phiên php nếu người dùng không hoạt động trong 15 phút

Tôi đang tạo phiên trong tệp config.php bằng cách viết dòng mã sau đây.

session_start(); 

và để hủy phiên này, trong tệp logout.php tôi có viết dòng sau.

session_destroy(); 

và tôi đã không đề cập đến bất kỳ mã cho phiên trong bất kỳ tập tin dự án khác, nhưng vấn đề là phiên đang hoạt động cho đến khi tôi gọi logout.php,

những gì tôi muốn là phiên nên hết hạn nếu người dùng không hoạt động trong 15 phút.

bất cứ ai có thể giúp tôi cho điều này, tôi mới để PHP, xin đưa ra một số ví dụ mã hoặc liên kết để đạt được điều này ..

+1

http://bytes.com/topic/php/answers/686406-php-session-time-limit – tekknolagi

+0

cũng http://stackoverflow.com/questions/520237/how-do-i-expire -a-php-session-after-30-minute – tekknolagi

+0

cũng http://stackoverflow.com/questions/3002975/set-expire-time-for-a-session – tekknolagi

Trả lời

15

Gọi dưới hàm trong tập tin tiêu đề của bạn, do đó bất cứ khi nào người dùng thực hiện bất kỳ hoạt động tại trang đó thời gian được làm mới và kiểm tra xem outs thời gian kỳ họp hay không.

function auto_logout($field) 
{ 
    $t = time(); 
    $t0 = $_SESSION[$field]; 
    $diff = $t - $t0; 
    if ($diff > 1500 || !isset($t0)) 
    {   
     return true; 
    } 
    else 
    { 
     $_SESSION[$field] = time(); 
    } 
} 

Sử dụng một cái gì đó như thế này trong tiêu đề

if(auto_logout("user_time")) 
    { 
     session_unset(); 
     session_destroy(); 
     location("login.php");   
     exit; 
    }  

User_time là tên phiên. Tôi hy vọng câu trả lời này sẽ giúp bạn. Những gì thực sự mã này làm là: "Kiểm tra xem khác biệt là lớn hơn 1500 giây hay không. Nếu không thì thiết lập thời gian phiên mới." Bạn có thể thay đổi thời gian khác nhau (1500) theo yêu cầu của bạn.

+0

chỉ là một câu hỏi kamal, làm thế nào để tôi tạo ra một phiên với tên 'user_time', becoz tôi được sử dụng để chỉ cần viết' session_start() ' – mack

+0

Bạn cần phải viết $ _SESSION ['name']; – Kamal

+0

cảm ơn kamal, nó làm việc cho tôi – mack

1

Bạn có thể sử dụng một cái gì đó như thế này

# Session Logout after in activity 
function sessionX(){ 
    $logLength = 1800; # time in seconds :: 1800 = 30 minutes 
    $ctime = strtotime("now"); # Create a time from a string 
    # If no session time is created, create one 
    if(!isset($_SESSION['sessionX'])){ 
     # create session time 
     $_SESSION['sessionX'] = $ctime; 
    }else{ 
     # Check if they have exceded the time limit of inactivity 
     if(((strtotime("now") - $_SESSION['sessionX']) > $logLength) && isLogged()){ 
      # If exceded the time, log the user out 
      logOut(); 
      # Redirect to login page to log back in 
      header("Location: /login.php"); 
      exit; 
     }else{ 
      # If they have not exceded the time limit of inactivity, keep them logged in 
      $_SESSION['sessionX'] = $ctime; 
     } 
    } 
} 

Nhưng hãy nhớ Chức năng sessionX() phải đến sau session_start()

Xem chi tiết here

+0

nếu tôi viết mã này trong tệp 'config.php' của tôi chỉ, điều này sẽ làm việc cho toàn bộ dự án, vì 'config.php' của tôi được bao gồm trong tất cả các tệp dự án khác? – mack

+0

tôi đoán nó sử dụng cookie – mack

4

thử

ini_set('session.gc_maxlifetime',54000); 
    ini_set('session.gc_probability',1); 
    ini_set('session.gc_divisor',1); 

sử dụng này trước khi gọi session_start()

+0

nếu tôi viết 3 dòng này trong tệp 'config.php' trước' session_start() 'nó có hoạt động cho toàn bộ dự án của tôi không? như 'config.php' được bao gồm trong tất cả các tệp dự án khác – mack

+0

có điều này làm việc cho mọi dự án bạn bao gồm config.php – user1186779

+0

ok, sau đây là mã trong' config.php' của tôi xem nó có hoạt động không? ' ' – mack

1

Tôi biết đây là câu hỏi được trả lời nhưng tôi chỉ muốn chia sẻ kinh nghiệm của mình và vì tôi cảm thấy đây là một cách tiếp cận dễ dàng hơn. Tôi không chắc đây có phải là cách tốt nhất hay không. Những gì tôi đã làm là:.

  1. tôi đặt một PHP Session ($ _SESSION [ 'timeout']) để thời gian hiện tại (thời gian()) khi người dùng đăng nhập

  2. Wrote chức năng sau đây để xác nhận xem người dùng có đang hoạt động hay không.

chức năng sessionTimeOut() {

// Chức năng này được bổ sung thêm 900 giây (15 phút, đó là khoảng thời gian bạn muốn người dùng // được hoạt động để tự động đăng xuất) để thời gian đã đăng ký trước đó khi người dùng hoạt động lần cuối.// Sau đó, kiểm tra xem thời gian hiện tại có lớn hơn khoảng thời gian bạn muốn người dùng // vẫn đăng nhập mà không có thời gian chờ (đó là 15 phút). Nếu nó lớn hơn, thì bạn được chuyển hướng đến trang đăng nhập // nơi bạn có thể bắt đầu chức năng đăng xuất với http://www.yourwebpage/login.php?status=timeout trên URL.

if ($ _SESSION [ 'timeout'] + 900> Thời gian()) {

// User Active so reset time session. 
    $_SESSION['timeout'] = time(); 

} else {

// session timed out then redirect to login page 
    header('Location:http://'. $_SERVER[HTTP_HOST] . '/login.php?status=timeout'); 

}

}

Cuối cùng: Gọi sessionTimeOut(); chức năng trong tiêu đề sau khi kiểm tra xem người dùng có đăng nhập hay không. Điều này cho phép chức năng được gọi mỗi lần người dùng làm mới hoặc điều hướng đến một trang mới. Vì vậy, nó hoạt động hoàn hảo (ít nhất là trong trường hợp của tôi), hoàn thành mục đích của tôi, vì vậy tôi nghĩ tôi sẽ chia sẻ nó với các bạn.

-1

Điều này đang được tiếp tục với những gì Kamal đã đăng. Tôi đã thử mã giống nhau nhưng đã làm cho nó hoạt động bằng cách sửa đổi nó như sau:

/* code */ 
function fnlogout($field) 
{ 
    $t = time(); 
    if (!isset($_SESSION[$field])) 
     $_SESSION[$field] = time(); 
    $t0 = $_SESSION[$field]; 
    $diff = $t - $t0; 
    if ($diff > 60) 
    {   
     return true; 
    }enter code here 
    else 
    { 
     return false; 
    } 
} 
function fnheader() 
{ 
    if(fnlogout("user_time")) 
    { 
     session_unset(); 
     session_destroy(); 
     header("location:index.php?action=expired"); 
     exit; 
    } 
} 

Vâng, Kamal đúng về vị trí chèn mã. Một phần là chức năng và phần khác trong tiêu đề của mỗi tệp hoặc hàm tiêu đề chung.

2

Lưu trữ time() trong biến $time. tạo biến được gọi là $setTime và đặt thời gian bạn muốn người dùng hết thời gian chờ.

Sau đó kiểm tra điều kiện nếu $_SESSION['setTime'] bị trống HOẶC không được đặt thì lưu giá trị thời gian chờ vào phiên, nếu không trang sẽ làm mới giá trị mới sẽ được gán cho $_SESSION['setTime'].

$time = time(); 
    $setTime = time() + 60; 
    if (empty ($_SESSION ['setTime']) || !isset ($_SESSION ['setTime'])) { 
     $_SESSION ['setTime'] = $setTime; 
    } 

Sau đó kiểm tra xem thời gian hiện tại có lớn hơn thời gian đã lưu không. và nếu nó không được đặt phiên. phá hủy phiên này.

if (time() >= (int) $_SESSION ['setTime']) { 
    session_unset(); 
    session_destroy(); 
} 
Các vấn đề liên quan