2013-04-26 41 views
8

Tôi đang làm việc trên một trang web cho một tổ chức phi lợi nhuận nhỏ (đọc: < 50 người dùng) mà tôi làm việc cùng và kiến ​​thức về PHP của tôi khá hạn chế. Hiện tại tôi có một kịch bản đăng nhập mà tôi tìm thấy từ một hướng dẫn trực tuyến. Vấn đề tôi đang gặp phải là mỗi người dùng đăng xuất sau khoảng một giờ hoặc lâu hơn.Cần trợ giúp tạo phiên đăng nhập PHP dài hơn

Bảo mật thực sự không phải là vấn đề với nội dung và lý tưởng tôi muốn người khác đăng nhập trong nhiều ngày hoặc vài tuần. Tuy nhiên, bất kỳ tìm kiếm nào trên Google về độ dài phiên đều khiến tôi tìm cách rút ngắn thời gian đăng xuất.

Theo như mã đi, một khi trang đăng nhập so sánh tên truy cập và mật khẩu để các cơ sở dữ liệu và sau với:

session_register("myusername"); 
session_register("mypassword"); 
header("location:index.php") 

Và trên mỗi trang được bảo vệ khi nó bắt đầu với:

session_start(); 
if(!session_is_registered(myusername)){ 
header("location:login.html:); 
} 
+3

FYI, 'session_register' bị xóa –

+0

bạn nên đặt lại hẹn giờ phiên tốt hơn khi người dùng có bất kỳ hoạt động nào. – Raptor

Trả lời

7

Chỉnh sửa của bạn .htaccess và đặt một cái gì đó như:

php_value session.gc_maxlifetime 2000 

2000 chỉ trong vài giây. Đặt cho phù hợp! Thao tác này sẽ báo cho trình thu thập dữ liệu phiên không hủy phiên trong 2000 giây. Ngoài ra, session_register không còn được dùng nữa.

+1

Vì vậy, tôi có thể chỉ cần thêm dòng đó vào .htaccess và đặt giá trị thành 604800 cho đăng nhập một tuần dài? (60 x 60 24 x 7) Ngoài ra, như một chút lưu ý phụ: Tôi biết rằng session_register không được dùng nữa nhưng tập lệnh tôi đã xóa khỏi Google sử dụng nó và nó đã hoạt động tốt cho tôi cho đến nay. Làm thế nào tôi sẽ đi về việc thay đổi nó để không sử dụng session_register và giữ chức năng tương tự? –

+0

Có, 604800 sẽ hoạt động tốt. Thay vì session_register sử dụng $ _SESSION ['username'] = 'whatever' ;. – ChrisG

+0

Cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn! –

4

Nếu bạn đang sử dụng cookie sẽ mặc định quản lý dựa trên phiên PHP (mà tôi tin rằng bạn đang có, vì bạn đã không đề cập đến bất cứ điều gì về việc thay đổi cách mặc định phiên công trình), bạn có thể sử dụng:

session_set_cookie_params(7200); // in seconds...session will last for 2 hours now 
session_start(); //once session cookie parameter is set, start the session.. 

session.gc* nhóm các giá trị ini cũng được sử dụng cho mục đích này, nhưng hãy nhớ rằng gc chỉ khuyến nghị khi phiên đó được thu thập rác, và không thực sự có nghĩa là nó sẽ xảy ra sau đó.

Bạn có thể đọc về cookie params heregarbage collection here

+0

Bạn đúng trong giả định tôi chưa thay đổi bất kỳ điều gì liên quan đến cookie. Dòng đầu tiên của mã bạn có, tôi giả định rằng đi trên mỗi trang được bảo vệ là tốt? –

+0

vâng, cách tốt nhất là đặt nó trong một phiên bao gồm tệp và bao gồm nó trong mọi trang nơi phiên sẽ hoạt động. – raidenace

+0

Nếu được bao gồm trong mỗi trang, nó sẽ đặt lại phiên thành 7200 mỗi lần bạn truy cập một trang khác? Trong thoery phiên sẽ không bao giờ kết thúc nếu bạn tiếp tục thay đổi các trang –

6

Với câu hỏi của bạn và quy mô của userbase của bạn, tôi muốn lựa chọn một sự thay đổi khung cảnh toàn cầu chứ không phải là cố gắng để tùy chỉnh các biến session; Nó đơn giản, làm những gì bạn cần và đòi hỏi rất ít nỗ lực để áp dụng cho tất cả người dùng.

Bạn có thể đặt trọn đời phiên toàn cầu của bạn (như được nêu trong câu trả lời khác) sử dụng một tập tin .htaccess:

php_value session.gc_maxlifetime 86400 //this is one day in seconds 

Hoặc, bạn cũng có thể thiết lập nó trong tập tin php.ini của bạn - một đoạn trong số đó là:

; After this number of seconds, stored data will be seen as 'garbage' and 
; cleaned up by the garbage collection process. 
session.gc_maxlifetime = 86400 

đối với không có gì nhưng tham khảo tinh khiết, các giá trị bạn cần phải xem xét trong thời gian dài hạn thu gom rác:

86400 = one day 
604800 = one week 

Bạn có thể đọc thêm về thu gom rác (gc) here.

Các vấn đề liên quan