Tôi cũng gặp sự cố với điều này. Tôi đã nghĩ rằng mỗi
session_set_cookie_params($sessionTime, '/', $domain);
session_start();
làm cho thời gian hết hạn cho cookie PHPSESSID được gia hạn. Nhưng thực sự cookie PHPSESSID được đặt bởi session_start()
chỉ lần đầu tiên trong phiên khi id phiên mới được tạo.
Mục tiêu của tôi là thời gian hết hạn phiên sẽ được tạo lại mỗi khi trang được mở. Tôi đã tìm ra phiên hết hạn có thể vì hai lý do:
- Cookie PHPSESSID hết hạn, và thời gian hết hạn của nó không được tái sinh bởi
session_start()
, vì vậy phiên sẽ luôn hết hạn vì cookie với thời gian hết hạn.
- Không hoạt động nào của người dùng sẽ khiến phiên đó sẽ hết hạn ở phía máy chủ. Nó được thiết lập bởi
ini_set('session.gc_maxlifetime', $sessionTime)
.
Giải pháp trong trường hợp này là khi bạn sẽ không thiết lập thời gian hết hạn cho cookie, nhưng session.gc_maxlifetime
vẫn thiết lập:
function my_session_start($maxtime = 300)
{
ini_set('session.gc_maxlifetime', $maxtime);
session_set_cookie_params(0, '/', "." . $domain);
session_start();
}
Quan trọng nhất là 0
trong session_set_cookie_params(0, '/', "." . $domain)
thì cookie sẽ không hết hạn và có không cần kéo dài thời gian hết hạn. Cookie này sẽ bị xóa khi trình duyệt bị đóng. Sau đó, chúng tôi chỉ giới hạn theo thời gian hết hạn ở phía máy chủ.
Tôi cũng gặp vấn đề với việc tôi không thể kéo dài thời gian phiên PHP bởi jQuery Ajax PING vì tôi đã đặt thời gian hết hạn cho PHPSESSID trong cookie. 0
giải quyết tất cả sự cố với các phiên kết thúc không mong đợi. Xin lỗi vì tiếng Anh của tôi. Chúc may mắn.
Nguồn
2014-02-16 03:51:26
Tôi có cùng một vấn đề như bạn đã làm ở đâu phiên nên được mở rộng miễn là có hoạt động và sau khi thực hiện nhiều thử nghiệm cục bộ, tôi thấy việc thêm session_regenerate_id() là cách tốt nhất cho bản thân mình. –