2009-08-25 36 views
11

Tôi đang sử dụng chức năng đăng nhập trong trang web của tôi với phiên. Phiên này của tôi hết hạn sau vài phút bất kể người dùng đó đã đăng xuất hay chưa. Bây giờ những gì tôi muốn là phiên chỉ nên hết hạn khi người dùng đăng xuất.Nếu người dùng không đăng xuất tài khoản của mình và sau đó quay lại sau 2-3 ngày, ngay cả khi đó anh ấy sẽ xuất hiện đăng nhập.phiên không bao giờ hết hạn bởi chính nó

tôi có tìm thấy một số ví dụ mà họ đã incresed thời gian cho một phiên hết hạn nhưng tôi muốn rằng nó chỉ nên hết hạn vào sự kiện đăng xuất của người sử dụng không phân biệt thời gian ông đã để đăng xuất.

làm cách nào tôi có thể làm điều đó ??

Edit:

session_cache_expire(0); 
session_start(); 

đây có phải là ghi cách để làm như vậy?

Trả lời

24

Một giải pháp thường được sử dụng, trong tình huống này, là để:

  • có thời lượng phiên không quá dài: nó sẽ hết hạn nếu người dùng không hoạt động (đó chỉ là cách nó hoạt động - và điều đó tốt hơn cho máy chủ của bạn nếu bạn có nhiều người dùng)
  • khi người dùng đăng nhập, bạn đặt cookie chứa những thứ cần thiết để anh ta được công nhận
  • nếu anh ấy quay lại trang web (với cookie, và không có phiên hoạt động), bạn sử dụng thông tin chứa trong cookie đó để tự động đăng nhập vào, tạo lại phiên cùng một lúc.

Bằng cách này:

  • bạn không có hàng ngàn phiên "hoạt động" không có lý do chính đáng
  • bạn giữ các buổi cách tiêu chuẩn làm việc

Và bạn có lợi thế của "không bao giờ được looged out", ít nhất là từ quan điểm của người dùng. Cũng lưu ý rằng với các phiên "bình thường", cookie chứa id phiên sẽ bị xóa khi người dùng đóng trình duyệt của mình - vì vậy, anh ta sẽ bị ngắt kết nối, bất kể thời lượng của phiên là bao lâu.
Với giải pháp tôi đề nghị, bạn là một trong những người thành lập bao lâu cookie nên vẫn còn trên máy tính của người dùng ;-)


Nó có nghĩa là, mặc dù, rằng khi một người sử dụng bằng tay ghi-out, bạn có để xóa cả phiên của anh ấy và cookie, tất nhiên - vì vậy anh ấy không tự động đăng nhập lại ngay lập tức.


Tất nhiên, bạn phải cẩn thận về những gì bạn đặt trong cookie: Cookie là không hoàn toàn an toàn, vì vậy tôi không lưu trữ mật khẩu trong nó, ví dụ ;-)


Trên thực tế, cách làm việc này là cách tính năng "nhớ tôi" thường hoạt động; ngoại trừ, ở đây, người dùng của bạn sẽ không phải chọn hộp kiểm để kích hoạt "nhớ tôi" ;-)


Nếu bạn không có thời gian để phát triển loại nội dung đó, một cách khá nhanh và bẩn để sử dụng một số yêu cầu Ajax trên tất cả các trang của bạn, điều đó sẽ chỉ "ping" một trang PHP trên máy chủ - điều này sẽ giữ cho phiên hoạt động (nhưng đó không phải là cách làm tốt: bạn vẫn sẽ có rất nhiều phiên trên máy chủ, bạn sẽ có rất nhiều yêu cầu vô ích ... và nó sẽ chỉ hoạt động miễn là người dùng không đóng trình duyệt của mình).

+0

tôi đã thiết lập một cookie với tên người dùng và một số ngẫu nhiên nối với nó và sau đó Tôi đã lưu nó vào cơ sở dữ liệu. Khi một trang được gọi thì tôi kiểm tra cookie hệ thống và khớp với nó trong cơ sở dữ liệu nếu cả hai kết quả trùng khớp sau đó tôi hiển thị người đó như đã đăng nhập bằng không. Và khi một người đăng xuất, tôi đặt cookie thành rỗng. Đây có phải là cách đúng không ??? và điều này có an toàn không ??? – developer

+0

Có vẻ OK với tôi, ít nhất - nó sẽ không bao giờ là "bảo mật hoàn hảo", vì bất cứ ai sử dụng máy tính của anh chàng sẽ tự động đăng nhập, nhưng điều đó là đủ, tôi cho rằng :-) –

+0

ya tôi hiểu bảo mật vấn đề. Vâng cảm ơn Martin :-) – developer

0

Bạn có xóa cookie trong khi thử nghiệm không? Cookie có được bật không? Bạn có hủy phiên ở đâu đó trong mã của bạn không?

Ngoài ra, hãy xem câu trả lời của tôi cho một bài đăng khác: Quick question about sessions in PHP giải thích cách đăng nhập. Chỉ cần không thực hiện tác vụ cronjob/sheduled nếu bạn muốn người dùng đăng nhập mãi mãi.

2

Bạn không thể thực hiện điều đó bằng cách xử lý phiên nội bộ PHP một mình. PHP sẽ luôn gửi id phiên trong cookie phiên sẽ hết hạn khi người dùng đóng trình duyệt của mình. Để đạt được một số loại đăng nhập tự động, bạn cần một số mã đi kèm đặt cookie lâu dài trên trình duyệt của người dùng và xử lý việc nhận dạng các cookie này và ánh xạ giữa giá trị cookie và tài khoản người dùng tương ứng.

Xin lưu ý rằng điều này ảnh hưởng rất lớn đến vấn đề bảo mật, do đó bạn sẽ phải chăm sóc rất nhiều thứ. Hãy đọc phần sau đây về cách một tính năng có thể tự động đăng nhập có thể được làm việc:

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