2008-10-01 14 views
49

Nếu tôi nhấn một trang gọi là session_start(). Tôi phải chờ bao lâu, để nếu tôi làm mới trang, tôi đã được cấp ID phiên mới?PHP: Thời hạn mặc định của phiên là

+4

cũng xem câu trả lời chi tiết hơn: http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30-minutes – kontur

Trả lời

45

Kiểm tra php.ini giá trị được đặt cho session.gc_maxlifetime là tuổi thọ ID trong vài giây.

Tôi tin mặc định là 1440 giây (24 phút)

http://www.php.net/manual/en/session.configuration.php

Edit: Như một số ý kiến ​​chỉ ra, ở trên là không hoàn toàn chính xác. Một lời giải thích tuyệt vời của lý do tại sao, và làm thế nào để thực hiện kiếp phiên có sẵn ở đây:

How do I expire a PHP session after 30 minutes?

+3

-1, không phải là câu trả lời đúng cho câu hỏi. quan niệm sai lầm phổ biến. – goat

+14

@chris tại sao bạn không đề xuất một câu trả lời thay thế? – Brannon

+3

Như Brannon viết, điều này hoàn toàn sai và không nên là câu trả lời được chọn. Giá trị này cho bộ thu gom rác biết cách xử lý, nó không phải là khoảng thời gian phiên của bạn tồn tại. Một oculd phiên sống mãi mãi nếu bạn không thêm một số cơ chế. Điều quan trọng là để xử lý cuộc đời phiên của riêng bạn (tức là xóa dữ liệu phiên sau một khoảng thời gian không hoạt động) và đặt session.gc_maxlifetime thành giá trị lớn hơn hoặc bằng nhau. kontur đề xuất câu trả lời tốt nhất vào thời điểm này, nhưng xin vui lòng unvalidate câu trả lời này, nó evens dẫn đến các vấn đề an ninh. – Ninj

1

nó phụ thuộc vào các thiết lập php của bạn ...
sử dụng phpinfo() và hãy nhìn vào chương phiên. Có giá trị như session.gc_maxlifetimesession.cache_expiresession.cookie_lifetime mà ảnh hưởng đến phiên đời

EDIT: nó giống như Martin viết trước

21

Giá trị mặc định trong php.ini cho thị session.gc_maxlifetime (các "gc" là cho thu gom rác thải) là 1440 giây hoặc 24 phút. Xem trang phiên Runtime configuation trong cuốn hướng dẫn:

http://www.php.net/manual/en/session.configuration.php

Bạn có thể thay đổi liên tục này trong php.ini hoặc các tập tin .httpd.conf nếu bạn có quyền truy cập vào chúng, hoặc trong tập tin .htaccess địa phương trên trang web của bạn. Để thiết lập thời gian chờ tới một giờ sử dụng phương pháp .htaccess, thêm dòng này vào tập tin .htaccess trong thư mục gốc của trang web:

php_value session.gc_maxlifetime "3600" 

Hãy cẩn thận nếu bạn đang ở trên một máy chủ chia sẻ hoặc nếu bạn lưu trữ nhiều hơn hơn một trang web mà bạn chưa thay đổi mặc định. Vị trí phiên mặc định là thư mục/tmp và thói quen thu thập rác sẽ chạy sau 24 phút đối với các trang web khác (và xóa các phiên của bạn trong quá trình, bất kể họ giữ nên giữ). Xem note trên trang thủ công hoặc this site để có giải thích tốt hơn.

Câu trả lời cho điều này là chuyển các phiên của bạn sang thư mục khác bằng session.save_path. Điều này cũng giúp ngăn chặn kẻ xấu xâm nhập các phiên truy cập của bạn từ thư mục mặc định/tmp.

+2

-1, không phải là câu trả lời đúng cho câu hỏi. quan niệm sai lầm phổ biến. một tập tin phiên gc thu thập sẽ không làm cho php tạo ra một id phiên mới, cũng không phải là giới hạn thời gian đáng tin cậy ngay cả khi phiên được lưu vào thư mục riêng của họ. – goat

0

Nhưng xem ra, trên hầu hết các thiết lập /...- xampp/ampp và một số destributions linux đó là 0, có nghĩa là các tập tin sẽ không bao giờ được xóa cho đến khi bạn làm điều đó trong kịch bản của bạn (hoặc bẩn qua vỏ)

PHP.INI:

; Lifetime in seconds of cookie or, if 0, until browser is restarted. 
; http://php.net/session.cookie-lifetime 
session.cookie_lifetime = 0 
2

Theo một người dùng trên PHP.net trang web, những nỗ lực của mình để giữ phiên còn sống không, vì vậy ông đã phải đưa ra cách giải quyết.

<?php 

$Lifetime = 3600; 
$separator = (strstr(strtoupper(substr(PHP_OS, 0, 3)), "WIN")) ? "\\" : "/"; 

$DirectoryPath = dirname(__FILE__) . "{$separator}SessionData"; 
//in Wamp for Windows the result for $DirectoryPath 
//would be C:\wamp\www\your_site\SessionData 

is_dir($DirectoryPath) or mkdir($DirectoryPath, 0777); 

if (ini_get("session.use_trans_sid") == true) { 
    ini_set("url_rewriter.tags", ""); 
    ini_set("session.use_trans_sid", false); 

} 

ini_set("session.gc_maxlifetime", $Lifetime); 
ini_set("session.gc_divisor", "1"); 
ini_set("session.gc_probability", "1"); 
ini_set("session.cookie_lifetime", "0"); 
ini_set("session.save_path", $DirectoryPath); 
session_start(); 

?> 

Trong thư mục SessionData sẽ lưu trữ tệp văn bản để giữ thông tin phiên, mỗi tệp sẽ có tên tương tự như "sess_a_big_hash_here".