Magento 2 batas waktu sesi backend

53

Di Magento 1.x batas waktu sesi backend ditetapkan melalui:
Backend -> System -> Configuration -> Admin -> Security -> Session Lifetime (seconds)

Awalnya, pertanyaan saya adalah bagaimana mengatur ini di Magento 2.0, tetapi ternyata ada perbedaan antara Magento 2.0 dan Magento 2.1

Untuk Magento 2.0: Arkadii Chyzhov telah menunjukkan cara mengatur ini (lihat di bawah).

Untuk Magento 2.1: fschmengler telah menyarankan solusi (lihat di bawah).

Namun, M 2.1 tampaknya tidak memberikan solusi langsung melalui backend. Adakah yang bisa membuat solusi tambahan untuk M 2.1?

Els den Iep
sumber

Jawaban:

82

Toko> Pengaturan> Konfigurasi> Lanjutan> Admin> Keamanan> Sesi Admin Seumur Hidup (detik)

Juga ada kemungkinan untuk mengatur parameter ini langsung ke database, cukup letakkan nilai di bawah jalur

admin / keamanan / session_lifetime

di tabel core_config_data

Memperbarui

Magento 2.1 masa hidup cookie admin = Toko> Pengaturan> Konfigurasi> Lanjutan> Admin> Keamanan> Sesi Admin Seumur Hidup (detik) atau hingga pengguna menutup browser

Sejak Magento 2.1 memperkenalkan seumur hidup untuk cookie admin sebagai "berakhir pada penutupan browser", bersama dengan nilai dalam Stores >Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds). Itu berarti, waktu hidup sesi itu sama dengan nilainya di Stores > Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)atau ketika browser ditutup.

Atau Anda dapat mengatur nilai baru untuk cookie admin, seperti yang diusulkan dalam jawaban fschmengler

Arkadii Chyzhov
sumber
apakah Anda tertarik untuk menyesuaikan fungsionalitas navigasi berlapis di situs M2 kami?
Els den Iep
@ElsdenIep, mohon. temukan informasi kontak saya di profil
Arkadii Chyzhov
Apakah Anda tahu apa kolom dalam database untuk nilai itu, jadi saya bisa mengubahnya secara terprogram?
jojman
Saya telah menetapkannya menjadi 50400 tetapi masih keluar setelah sekitar 20 menit ....
OZZIE
@ArkadiiChyzhov lihat jawaban saya di bawah ini :)
OZZIE
16

Periksa screenshot gambar terlampir untuk pemahaman yang lebih baik tentang proses admin.

Pergi ke Toko-> Pengaturan-> Konfigurasi-> Lanjutan-> Admin-> Keamanan-> Sesi Admin Seumur Hidup (detik)

Dan periksa tangkapan layar. masukkan deskripsi gambar di sini

Yogesh Trivedi
sumber
10

Solusi untuk Magento 2.1+

Sejak Magento 2.1 masa admin sesi selalu "sesi", yaitu sampai browser ditutup. Initelah mungkin telah diperkenalkan karena alasan keamanan.

Kode yang relevan ada di Magento\Backend\Model\Session\AdminConfig:

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

Jika Anda ingin mengubah perilaku ini, Anda bisa menambahkan plugin untuk kelas ini dengan metode interseptor berikut:

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];
}

Di mana $this->scopeConfigharus menjadi contoh \Magento\Framework\App\Config\ScopeConfigInterface, disuntikkan melalui parameter konstruktor.

Dengan cara ini, masa pakai cookie digunakan dari konfigurasi, sama seperti di frontend.

Perhatikan bahwa konfigurasi di Toko> Konfigurasi> Tingkat Lanjut> Keamanan Admin> Session Seumur Hidup tidak lagi memiliki pengaruh pada cookie! Ini digunakan untuk menentukan seumur hidup sesi Redis, jadi jika Anda menambah umur cookie, Anda juga harus meningkatkan nilai ini.

Fabian Schmengler
sumber
Saya ingin tahu apakah Anda dapat menjelaskan alasan keamanan ini. Dari sudut pandang saya, mengatur masa pakai cookie admin ke 0, membawa perbedaan dan perilaku yang tidak jelas, jika kita menggunakan 'admin / security / session_lifetime', yang menentukan waktu hidup sesi admin, dan yang tergantung dari 2.1 pada cookie seumur hidup secara implisit.
Arkadii Chyzhov
1
Saya berasumsi itu untuk mencegah kasus bahwa admin menutup jendela tanpa "logout" dan siapa pun yang mendapatkan akses ke pc yang sama sudah masuk. Ini bukan ancaman besar dan saya setuju dengan Anda bahwa itu adalah keputusan yang buruk untuk membuat "fitur" ini tidak jelas.
Fabian Schmengler
Tetapi saya mencari komit yang bertanggung jawab sekarang dan menemukan ini: github.com/magento/magento2/commit/… "MAGETWO-49092: Kunci Form Tidak Valid pada halaman login Admin" - sepertinya lebih seperti solusi untuk menyembunyikan bug lain dengan bug yang lebih banyak. atau kurang efek samping yang tidak disengaja dan setidaknya tidak berdokumen.
Fabian Schmengler
Pasti ada lebih banyak hal yang terjadi, karena sesi saya masih berakhir tanpa menutup browser saya.
Matt Cosentino
1
@Volvox perhatikan baik-baik: plugin ini untuk setCookieLifetime, metode publik dengan parameter
Fabian Schmengler
6

Catatan di sini, jawaban yang diterima berfungsi namun magento 2 menggunakan folder php default untuk menyimpan file sesi, jika Anda telah mengkonfigurasi ini di php:

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

maka ini ditambahkan ke sistem cron oleh instalasi php.

Jadi, Anda juga bisa

  • nonaktifkan cron itu
  • atau lebih baik: tingkatkan gc_maxlifetimephp.ini (karena ini akan menjadi batas atas)
OZZIE
sumber
2

Solusi lain tanpa mengubah pengaturan apa pun adalah menginstal apa pun auto refresh addonuntuk browser Anda dan mengatur waktunya (60 detik).

Ini akan secara otomatis me-refresh halaman untuk setiap 6o detik yang mencegah masa sesi berakhir dan kita dapat mulai bekerja pada tab lain.

Saya menggunakan Easy Auto Refreshdan berfungsi dengan baik untuk saya.

Amit Singh
sumber
jangan konyol dengan "solusi" seperti itu. itu benar-benar tidak dapat diterima.
sellio
2

Jika Anda menggunakan beberapa VM / server untuk web dan db dan waktu tidak disinkronkan juga menyebabkan masalah.

Jadi, jika semua opsi di atas tidak berfungsi, periksa cap waktu / tanggal dari dua pengungkit saat Anda menggunakan beberapa server untuk web dan db.

Aunik Rahman
sumber
1

Saya tidak tahu mengapa tetapi bagi sebagian dari kita menetapkan Admin Session Lifetime dari backend tidak berfungsi, jadi saya menemukan beberapa solusi:

  1. Di php.ini ubah session.gc_maxlifetime dari 1440 menjadi berapa pun detik yang Anda inginkan. (Solusi ini bekerja untuk saya, diuji pada Magento 2.2.0 dan 2.2.1)

  2. Dalam .htaccess tambahkan "php_value session.gc_maxlifetime 28800" atau berapa pun jumlah detik yang Anda inginkan.

  3. Dengan secara manual mengatur masa pakai. Buka vendor / magento / module-enkripsi-key / etc / config.xml dan ubah dari 900s menjadi berapa detik yang Anda inginkan.

Semoga salah satu solusi ini akan bekerja untuk orang lain juga.

Sylaratty
sumber