Làm cách nào để khởi động lại Apache mà không cần thiết lập lại phiên người dùng?


8

Người dùng đã đăng nhập vào trang web PHP> Tôi khởi động lại Apache> Người dùng cần đăng nhập lại.

Làm thế nào để ngăn chặn điều này? (Tôi không muốn người dùng cần đăng nhập lại)


Để kiểm tra: bạn có khả năng chỉnh sửa PHP, phải không?
Peter Taylor

Nếu đó là ứng dụng của riêng bạn, tôi sẽ đề xuất những gì @Jacob Hume dưới đây đã đề xuất và thay đổi ứng dụng của bạn để lưu trữ các phiên trong bảng cơ sở dữ liệu. Điều này cho phép bạn kiểm soát nhiều hơn theo ý kiến ​​của tôi đối với trang web của bạn vì bạn có thể buộc người dùng đăng xuất nếu cần có chọn lọc.
Anagio

Tôi có thể chỉnh sửa PHP. Tôi đang sử dụng một CMS (Drupal). Tôi cũng đang sử dụng APC và đang tìm kiếm một giải pháp theo cách này.
dowik

Câu trả lời:


6

Lưu trữ mã thông báo phiên ở vị trí thay thế làm bản sao lưu sẽ ngăn chặn sự cố này. Bạn vẫn có thể giữ thông tin chính của mình $_SESSION, nhưng giữ mã thông báo dự phòng:

  • Bánh quy
  • Hồ sơ cơ sở dữ liệu
  • Lưu trữ cục bộ HTML5

Bạn có thể tìm thấy một số trợ giúp trong câu hỏi StackOverflow này: cách thực hành tốt nhất cho thời gian chờ phiên và đăng nhập liên tục trong php .


Cảm ơn câu trả lời và cảm ơn các liên kết. Tôi đang tìm kiếm một giải pháp trên tập tin cấu hình phía máy chủ (loại "giữ phiên làm việc khởi động lại"). Nhưng có vẻ như giải pháp là ở phía ứng dụng.
dowik

Ôi trời ... Thật ra tôi chỉ đơn giản là tìm kiếm "apache2ctl -k duyên dáng"!
dowik

3

Dữ liệu phiên của bạn không nên bị mất chỉ vì Apache bị tắt hoặc khởi động lại trừ khi dữ liệu phiên được lưu trữ trong bộ nhớ và không được sao lưu vào đĩa (bởi hệ thống tệp hoặc cơ sở dữ liệu). Nếu không, bạn có thể khởi động lại toàn bộ máy chủ và phiên vẫn sẽ tiếp tục. Dữ liệu phiên được thiết kế để được lưu trữ lâu dài. Lần duy nhất phiên bị mất là nếu:

  1. SID bị mất. Dữ liệu phiên vẫn tồn tại phía máy chủ, nhưng máy khách không thể khôi phục SID, do đó không thể tạo lại cùng một phiên. Điều này có thể xảy ra nếu cookie SID hết hạn (nếu đó là cookie) hoặc các liên kết phiên bị mất (nếu SID là tham số URL) hoặc SID không được đặt phía máy chủ hoặc thay đổi mà không thông báo cho khách hàng.

  2. Dữ liệu phiên bị xóa phía máy chủ. Điều này thường xảy ra khi Trình thu thập rác phiên PHP chạy và thấy tệp phiên cũ hơn session.gc_maxlifetime (mặc định là 24 phút). Mặt khác, nó có thể xảy ra nếu ứng dụng xóa rõ ràng phiên . Trên một số máy chủ, quản trị viên cũng có thể đã cấu hình một cronjob để xóa dữ liệu phiên cũ một cách thường xuyên.


Cảm ơn về những liệt kê chi tiết của bạn. Tôi sẽ điều tra theo cách này. Nhưng ngay bây giờ, tôi chỉ đơn giản sẽ sử dụng khởi động lại duyên dáng có vẻ phù hợp với nhu cầu của tôi.
dowik

@dowik: Làm thế nào để một khởi động lại duyên dáng phù hợp với nhu cầu của bạn? Là vấn đề của bạn bị mất phiên hoặc tải xuống bị gián đoạn? Nếu đó là cái sau, thì khởi động lại / tắt máy duyên dáng sẽ thực sự giải quyết điều đó. Nhưng sau đó bạn nên chỉnh sửa câu hỏi của bạn để phản ánh điều đó. Bởi vì khởi động lại duyên dáng không liên quan gì đến các phiên PHP và nó sẽ không giúp những người dùng khác cố gắng ngăn chặn các phiên bị mất.
Lèse majesté

Tôi đã cố gắng cập nhật tiêu đề câu hỏi của mình bằng cách thay thế "phiên PHP" bằng "phiên người dùng" như mô tả trong nội dung câu hỏi của tôi. Tốt hơn cho bạn? Nói chính xác hơn: Tôi sử dụng APC. Khi tôi thay đổi mã trong các tệp PHP, tôi cần xóa bộ đệm APC (khởi động lại Apache là cách đơn giản nhất để làm điều đó tôi biết). Với đối số "khởi động lại", người dùng trang web của tôi cần đăng nhập lại. Trong khi với "duyên dáng", họ không. Đó là lý do tại sao "điều đó dường như phù hợp với nhu cầu của tôi".
dowik

@dowik: Tôi không nghĩ rằng có bất cứ điều gì để làm với khởi động lại duyên dáng. Bạn rất có thể đã có một khởi động lại trùng với trình thu gom rác phiên PHP. Đăng nhập lại và thử khởi động lại thường xuyên ngay sau đó. Trừ khi bạn lưu trữ phiên trong bộ nhớ (MM), phiên sẽ được lưu.
Lèse majesté

1

Được thực hiện bằng cách sử dụng đúng đối số với Apache:

apache2ctl -k graceful

Apache sẽ khởi động lại mà không mất các phiên hiện tại.


2
Khởi động lại duyên dáng chỉ trì hoãn việc tắt máy cho đến khi các kết nối hiện tại bị chấm dứt. Nó không thay đổi hành vi khởi động lại.
Lèse majesté
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.