Hết thời gian chờ phiên Magento 2


53

Trong Magento 1.x, thời gian chờ phiên phụ trợ được đặt qua:
Backend -> System -> Configuration -> Admin -> Security -> Session Lifetime (seconds)

Ban đầu, câu hỏi của tôi là làm thế nào để thiết lập điều này trong Magento 2.0, nhưng rõ ràng có sự khác biệt giữa Magento 2.0 và Magento 2.1

Đối với Magento 2.0: Arkadii Chyzhov đã chỉ ra cách thiết lập điều này (xem bên dưới).

Đối với Magento 2.1: fschmengler đã đề xuất một giải pháp (xem bên dưới).

Tuy nhiên, M 2.1 dường như không cung cấp giải pháp đơn giản thông qua phụ trợ. Bất cứ ai cũng có thể đưa ra một giải pháp bổ sung cho M 2.1?

Câu trả lời:


82

Cửa hàng> Cài đặt> Cấu hình> Nâng cao> Quản trị viên> Bảo mật> Phiên quản trị trọn đời (giây)

Ngoài ra có khả năng đặt tham số này trực tiếp vào cơ sở dữ liệu, chỉ cần đặt một giá trị theo đường dẫn

quản trị viên / bảo mật / session_lifetime

trong bảng core_config_data

Cập nhật

Thời gian tồn tại của cookie quản trị Magento 2.1 = Cửa hàng> Cài đặt> Cấu hình> Nâng cao> Quản trị viên> Bảo mật> Phiên quản trị trọn đời (giây) hoặc cho đến khi người dùng đóng trình duyệt

Magento 2.1 giới thiệu trọn đời cho cookie quản trị là "hết hạn trên trình duyệt đóng", cùng với giá trị trong Stores >Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds). Điều đó có nghĩa là, thời gian sống của phiên đó bằng với giá trị trong Stores > Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)hoặc khi đóng trình duyệt.

Hoặc bạn có thể thiết lập một giá trị mới cho cookie quản trị viên, giống như nó được đề xuất trong câu trả lời của fschmengler


bạn có muốn điều chỉnh chức năng của điều hướng lớp trên trang web M2 của chúng tôi không?
Els den Iep

@ElsdenIep xin vui lòng. tìm thông tin liên lạc của tôi trong hồ sơ
Arkadii Chyzhov

Bạn có biết cột trong cơ sở dữ liệu cho giá trị đó là gì không, vì vậy tôi có thể thay đổi nó theo chương trình?
jojman

Tôi đã đặt nó là 50400 nhưng nó vẫn đăng xuất sau khoảng 20 phút ....
OZZIE

@ArkadiiChyzhov xem câu trả lời của tôi dưới đây :)
OZZIE

16

Kiểm tra ảnh chụp màn hình đính kèm để hiểu rõ hơn về quy trình quản trị.

Chuyển đến Cửa hàng-> Cài đặt-> Cấu hình-> Nâng cao-> Quản trị viên-> Bảo mật-> Phiên quản trị trọn đời (giây)

Và kiểm tra ảnh chụp màn hình. nhập mô tả hình ảnh ở đây


10

Giải pháp cho Magento 2.1+

Vì Magento 2.1, thời gian tồn tại của quản trị viên luôn là "phiên", tức là cho đến khi trình duyệt được đóng. Điều nàyđã được có thể đã được giới thiệu vì lý do bảo mật.

Mã có liên quan là Magento\Backend\Model\Session\AdminConfig:

/**
 * Set session cookie lifetime to session duration
 *
 * @return $this
 */
protected function configureCookieLifetime()
{
    return $this->setCookieLifetime(0);
}

Nếu bạn muốn thay đổi hành vi này, bạn có thể thêm một plugin cho lớp này bằng phương thức chặn sau:

public function beforeSetCookieLifetime()
{
    $lifetime = $this->scopeConfig->getValue(
        \Magento\Framework\Session\Config::XML_PATH_COOKIE_LIFETIME,
        \Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT);
    return [$lifetime, \Magento\Framework\Session\Config::COOKIE_LIFETIME_DEFAULT];
}

Trường hợp $this->scopeConfignên là một thể hiện của \Magento\Framework\App\Config\ScopeConfigInterface, được tiêm thông qua tham số hàm tạo.

Bằng cách này, tuổi thọ của cookie được sử dụng từ cấu hình, giống như trong frontend.

Lưu ý rằng cấu hình trong Cửa hàng> Cấu hình> Nâng cao> Bảo mật quản trị viên> Thời gian tồn tại của phiên không còn ảnh hưởng đến cookie nữa! Nó được sử dụng để xác định tuổi thọ phiên Redis, vì vậy nếu bạn tăng tuổi thọ cookie, bạn cũng nên tăng giá trị này.


Tôi tự hỏi nếu bạn có thể giải thích lý do bảo mật này. Theo quan điểm của tôi, đặt tuổi thọ cookie của quản trị viên thành 0, mang lại sự khác biệt và hành vi không rõ ràng, nếu chúng ta đang sử dụng 'admin / security / session_lifetime', xác định thời gian tồn tại của phiên quản trị viên và phụ thuộc vào 2.1 vào thời gian tồn tại của cookie.
Arkadii Chyzhov

1
Tôi cho rằng đó là để ngăn chặn trường hợp quản trị viên đóng cửa sổ mà không "đăng xuất" và bất kỳ người nào có quyền truy cập vào cùng một máy tính đã đăng nhập. Đây không phải là một mối đe dọa lớn và tôi đồng ý với bạn rằng đó là một quyết định tồi để làm cho "tính năng" này không rõ ràng.
Fabian Schmengler

Nhưng tôi đã tìm kiếm cam kết có trách nhiệm ngay bây giờ và tìm thấy điều này: github.com/magento/magento2/commit/ mẹo "MAGETWO-49092: Khóa biểu mẫu không hợp lệ trên trang đăng nhập của quản trị viên" - nghe có vẻ giống như một cách giải quyết khác để che giấu một lỗi khác với nhiều hơn hoặc ít vô tình và ít nhất là tác dụng phụ không có giấy tờ.
Fabian Schmengler

Phải có nhiều hơn nữa, bởi vì phiên của tôi vẫn hết hạn mà không đóng trình duyệt của tôi.
Matt Cosentino

1
@Volvox xem xét cẩn thận: plugin dành cho setCookieLifetime, một phương thức công khai với các tham số
Fabian Schmengler

6

Một lưu ý ở đây, câu trả lời được chấp nhận hoạt động tuy nhiên magento 2 sử dụng thư mục php mặc định để lưu trữ các tệp phiên, nếu bạn có cấu hình này trong php:

09,39 *     * * *     root   [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean

sau đó, điều này được thêm vào cron hệ thống bằng cách cài đặt php.

Vì vậy, sau đó bạn có thể

  • vô hiệu hóa cron đó
  • hoặc tốt hơn: tăng gc_maxlifetimephp.ini (vì đây sẽ là giới hạn trên)

2

Một giải pháp khác mà không sửa đổi bất kỳ cài đặt nào là cài đặt bất kỳ auto refresh addoncho trình duyệt của bạn và đặt thời gian của nó (60 giây).

Nó sẽ tự động làm mới trang cứ sau 6o giây, điều này ngăn thời gian tồn tại của phiên hết hạn và chúng ta có thể bắt đầu làm việc trên một tab khác.

Tôi đã sử dụng Easy Auto Refreshvà nó hoạt động tốt cho tôi.


đừng ngớ ngẩn với những "giải pháp" như vậy. nó hoàn toàn không thể chấp nhận được.
sellio

2

Nếu bạn đang sử dụng nhiều VM / máy chủ cho web và db và thời gian không đồng bộ hóa cũng gây ra sự cố.

Vì vậy, nếu tất cả các tùy chọn ở trên không hoạt động, hãy kiểm tra dấu thời gian / ngày của hai máy chủ khi bạn đang sử dụng nhiều máy chủ cho web và db.


1

Tôi không biết tại sao nhưng đối với một số người trong chúng tôi thiết lập Thời gian dành cho quản trị viên suốt đời từ phụ trợ không hoạt động, vì vậy tôi đã tìm thấy một vài giải pháp:

  1. Trong php.ini thay đổi session.gc_maxlifetime từ 1440 thành bất kỳ số giây nào bạn muốn. (Giải pháp này hiệu quả với tôi, đã thử nghiệm trên magento 2.2.0 và 2.2.1)

  2. Trong .htaccess thêm "php_value session.gc_maxlifetime 28800" hoặc vào bất kỳ số giây nào bạn muốn.

  3. Bằng cách thiết lập thủ công trọn đời. Chuyển đến nhà cung cấp / magento / mô-đun mã hóa-khóa / etc / config.xml và thay đổi từ 900 giây thành bất kỳ số giây nào bạn muốn.

Hy vọng một trong những giải pháp này sẽ làm việc cho những người khác quá.

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.