การหมดเวลาเซสชันของแบ็กเอนด์ Magento 2


53

ใน Magento 1.x การหมดเวลาเซสชันของแบ็กเอนด์ถูกตั้งค่าผ่าน:
Backend -> System -> Configuration -> Admin -> Security -> Session Lifetime (seconds)

เริ่มแรกคำถามของฉันคือวิธีการตั้งค่านี้ใน Magento 2.0 แต่เห็นได้ชัดว่ามีความแตกต่างระหว่าง Magento 2.0 และ Magento 2.1

สำหรับ Magento 2.0: Arkadii Chyzhov ได้ชี้ให้เห็นวิธีการตั้งค่านี้ (ดูด้านล่าง)

สำหรับ Magento 2.1: fschmengler ได้แนะนำวิธีแก้ไขปัญหา (ดูด้านล่าง)

อย่างไรก็ตาม M 2.1 ดูเหมือนว่าจะไม่ให้โซลูชันที่ตรงไปตรงมาผ่านทางแบ็กเอนด์ ใครสามารถคิดวิธีแก้ปัญหาเพิ่มเติมสำหรับ M 2.1 ได้หรือไม่?

คำตอบ:


82

ร้านค้า> การตั้งค่า> การกำหนดค่า> ขั้นสูง> ผู้ดูแลระบบ> ความปลอดภัย> อายุการใช้งานเซสชันผู้ดูแลระบบ (วินาที)

นอกจากนี้ยังมีความเป็นไปได้ในการตั้งค่าพารามิเตอร์นี้โดยตรงกับฐานข้อมูลเพียงแค่ใส่ค่าภายใต้เส้นทาง

admin / การรักษาความปลอดภัย / session_lifetime

ในตารางcore_config_data

ปรับปรุง

Magento 2.1 อายุการใช้งานคุกกี้ผู้ดูแลระบบ = ร้านค้า> การตั้งค่า> การกำหนดค่า> ขั้นสูง> ผู้ดูแลระบบ> ความปลอดภัย> อายุการใช้งานเซสชันผู้ดูแลระบบ (วินาที) หรือจนกว่าผู้ใช้จะปิดเบราว์เซอร์

ตั้งแต่วีโอไอพี 2.1แนะนำอายุการใช้งานสำหรับผู้ดูแลระบบคุกกี้เป็น "หมดอายุในเบราว์เซอร์ใกล้" พร้อมกับStores >Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)ค่าใน ซึ่งหมายความว่าเวลาชีวิตของเซสชันนั้นเท่ากับมูลค่าในStores > Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)หรือเมื่อปิดเบราว์เซอร์

หรือคุณสามารถตั้งค่าใหม่สำหรับคุกกี้ผู้ดูแลระบบได้เช่นเดียวกับที่เสนอในคำตอบของ fschmengler


คุณสนใจที่จะปรับการทำงานของการนำทางแบบเลเยอร์บนเว็บไซต์ M2 ของเราหรือไม่?
Els den Iep

@ElsdenIep กรุณา ค้นหาข้อมูลติดต่อของฉันในโปรไฟล์
Arkadii Chyzhov

คุณรู้หรือไม่คอลัมน์คืออะไรในฐานข้อมูลสำหรับค่านั้นดังนั้นฉันสามารถเปลี่ยนได้โดยทางโปรแกรม?
jojman

ฉันได้ตั้งค่าเป็น 50400 แต่ยังคงล็อกเอาต์หลังจากผ่านไปประมาณ 20 นาที ....
OZZIE

@ArkadiiChyzhov ดูคำตอบของฉันด้านล่าง :)
ชีวิตคู่

16

ตรวจสอบภาพหน้าจอที่แนบมาเพื่อให้เข้าใจกระบวนการผู้ดูแลระบบได้ดีขึ้น

ไปที่ Stores-> Settings-> Configuration-> Advanced-> Admin-> Security-> Admin Session Lifetime (วินาที)

และตรวจสอบภาพหน้าจอ ป้อนคำอธิบายรูปภาพที่นี่


10

โซลูชันสำหรับ Magento 2.1+

ตั้งแต่ Magento 2.1 อายุการใช้งานเซสชันผู้ดูแลระบบจะเป็น "เซสชัน" เสมอเช่นจนกว่าเบราว์เซอร์จะปิด นี้ได้รับการ อาจถูกนำเสนอด้วยเหตุผลด้านความปลอดภัย

รหัสที่เกี่ยวข้องอยู่ในMagento\Backend\Model\Session\AdminConfig:

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

หากคุณต้องการเปลี่ยนพฤติกรรมนี้คุณสามารถเพิ่มปลั๊กอินสำหรับคลาสนี้ด้วยวิธีการดักต่อไปนี้:

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

ในกรณีที่$this->scopeConfigควรเป็นตัวอย่างของการ\Magento\Framework\App\Config\ScopeConfigInterfaceฉีดผ่านพารามิเตอร์คอนสตรัค

วิธีนี้อายุการใช้งานคุกกี้จะถูกใช้จากการกำหนดค่าเช่นเดียวกับในส่วนหน้า

โปรดทราบว่าการกำหนดค่าในร้านค้า> การกำหนดค่า> ขั้นสูง> ความปลอดภัยของผู้ดูแลระบบ> อายุการใช้งานเซสชันจะไม่มีผลกับคุกกี้อีกต่อไป! มันถูกใช้เพื่อกำหนดอายุการใช้งาน Redis ดังนั้นหากคุณเพิ่มอายุการใช้งานคุกกี้คุณควรเพิ่มค่านี้ด้วย


ฉันสงสัยว่าคุณสามารถอธิบายเหตุผลด้านความปลอดภัยนี้ได้หรือไม่ จากมุมมองของฉันการตั้งค่าอายุการใช้งานคุกกี้ของผู้ดูแลระบบเป็น 0 จะทำให้เกิดความแตกต่างและพฤติกรรมที่ไม่ชัดเจนหากเราใช้ 'ผู้ดูแลระบบ / ความปลอดภัย / session_lifetime' ซึ่งกำหนดอายุการใช้งานเซสชันผู้ดูแลระบบ
Arkadii Chyzhov

1
ฉันคิดว่ามันคือการป้องกันกรณีที่ผู้ดูแลระบบปิดหน้าต่างโดยไม่ต้อง "ออกจากระบบ" และบุคคลใดก็ตามที่ได้รับการเข้าถึงพีซีเครื่องเดียวกันนั้นได้เข้าสู่ระบบแล้วนี่ไม่ใช่ภัยคุกคามที่สำคัญและฉันเห็นด้วยกับคุณว่าเป็นการตัดสินใจที่ผิดพลาด เพื่อทำให้คุณลักษณะ "" นี้ไม่ชัดเจน
Fabian Schmengler

แต่ฉันค้นหาความรับผิดชอบที่รับผิดชอบในตอนนี้และพบสิ่งนี้: github.com/magento/magento2/commit/ ...... "MAGETWO-49092: คีย์ฟอร์มไม่ถูกต้องในหน้าลงชื่อเข้าใช้ของผู้ดูแลระบบ" - ฟังดูเหมือนเป็นวิธีแก้ปัญหาเพื่อซ่อนข้อผิดพลาดอีกด้วย หรือน้อยกว่าอุบัติเหตุและผลข้างเคียงที่ไม่มีเอกสารอย่างน้อย
Fabian Schmengler

ต้องมีสิ่งต่อไปมากกว่านี้เนื่องจากเซสชันของฉันยังคงหมดอายุโดยไม่ต้องปิดเบราว์เซอร์
Matt Cosentino

1
@Volvox ดูอย่างระมัดระวัง: ปลั๊กอินสำหรับsetCookieLifetimeวิธีการที่ประชาชนมีพารามิเตอร์
Fabian Schmengler

6

หมายเหตุที่นี่คำตอบที่ได้รับการยอมรับ แต่ magento 2 ใช้โฟลเดอร์ php เริ่มต้นเพื่อเก็บไฟล์เซสชันหากคุณมีการกำหนดค่านี้ใน php:

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

จากนั้นจะถูกเพิ่มไปยัง cron ของระบบโดยการติดตั้ง php

ดังนั้นคุณสามารถ

  • ปิดการใช้งาน cron นั้น
  • หรือดีกว่า: เพิ่มขึ้นgc_maxlifetimeใน php.ini (เช่นนี้จะเป็นขีด จำกัด บน)

2

โซลูชันอื่นที่ไม่มีการแก้ไขการตั้งค่าใด ๆ คือการติดตั้งใด ๆ auto refresh addonสำหรับเบราว์เซอร์ของคุณและตั้งเวลา (60 วินาที)

มันจะรีเฟรชหน้าเว็บโดยอัตโนมัติทุกๆ 6o วินาทีซึ่งป้องกันไม่ให้อายุการใช้งานเซสชั่นหมดอายุและเราสามารถเริ่มทำงานในแท็บอื่น

ฉันใช้Easy Auto Refreshและมันใช้งานได้ดีสำหรับฉัน


ไม่ต้องงี่เง่ากับ "โซลูชั่น" เช่นนั้น มันไม่สามารถยอมรับได้โดยสิ้นเชิง
sellio

2

หากคุณใช้ VMs / เซิร์ฟเวอร์หลายตัวสำหรับเว็บและ db และเวลาไม่ซิงค์ก็ทำให้เกิดปัญหาเช่นกัน

ดังนั้นหากตัวเลือกทั้งหมดด้านบนใช้งานไม่ได้ให้ตรวจสอบการประทับเวลา / วันที่ของทั้งสอง severs เมื่อคุณใช้เซิร์ฟเวอร์หลายเครื่องสำหรับเว็บและ db


1

ฉันไม่รู้ว่าทำไม แต่สำหรับพวกเราบางคนการตั้งค่าอายุการใช้งานเซสชันผู้ดูแลระบบจากแบ็กเอนด์ไม่ทำงานดังนั้นฉันจึงพบวิธีแก้ไขปัญหาสองข้อ:

  1. ใน php.ini เปลี่ยน session.gc_maxlifetime จาก 1440 เป็นกี่วินาทีตามที่คุณต้องการ (วิธีนี้ใช้ได้ผลกับฉันทดสอบกับ magento 2.2.0 และ 2.2.1)

  2. ใน. htaccess เพิ่ม "php_value session.gc_maxlifetime 28800" หรือเพิ่มเข้าไปในจำนวนวินาทีที่คุณต้องการ

  3. โดยการตั้งค่าอายุการใช้งานด้วยตนเอง ไปที่ผู้ขาย / magento / module-encryption-key / etc / config.xmlและเปลี่ยนจาก 900s เป็นจำนวนวินาทีที่คุณต้องการ

หวังว่าหนึ่งในโซลูชันนี้จะใช้ได้กับคนอื่นด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.