Tôi đang chăm sóc một cửa hàng Magento với 400-500 khách và 40-50 đơn hàng mỗi ngày. Gần đây hệ thống đã được nâng cấp từ Magento EE 1.14.2.4 lên Magento EE 1.14.3.2 và tôi nhận thấy một số ngoại lệ lạ trong nhật ký:
exception 'Mage_Core_Model_Session_Exception' in
/var/www/.../app/code/core/Mage/Core/Model/Session/Abstract/Varien.php:418
Tôi đã theo đuổi ngoại lệ đó và tôi biết rằng nó đang bị sa thải vì mã xác thực phiên sau không thể xác thực phiên:
class Mage_Core_Model_Session_Abstract_Varien extends Varien_Object
{
// ...
protected function _validate()
{
// ...
if ($this->useValidateSessionExpire()
&& isset($sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP])
&& $sessionData[self::VALIDATOR_SESSION_EXPIRE_TIMESTAMP] < time() ) {
Khối if này đã được thêm vào tệp với bản phát hành mới nhất từ Magento. Và đây là một sự thay đổi phanh rõ ràng, xem thêm chi tiết dưới đây.
Ngoại lệ xảy ra khá thường xuyên, như một chục lần mỗi ngày. nhưng tôi không thể tạo lại các điều kiện dẫn đến ngoại lệ, trừ khi tôi thực sự đặt điều kiện đúng trong điều kiện trên. Các ngoại lệ thường xảy ra nhất trên các trang chi tiết sản phẩm và ở bước cuối cùng của thanh toán một trang. Cửa hàng là cửa hàng b2b, người dùng phải đăng nhập để xem trang sản phẩm hoặc để có thể thanh toán, có nghĩa là người dùng được chuyển hướng đến các trang đăng nhập khi phiên bị vô hiệu / hết hạn. Hiện tại, điều quan trọng hơn đối với tôi là khắc phục vấn đề này trong quá trình thanh toán.
Điều gì xảy ra từ góc độ người dùng: Người dùng điền vào giỏ hàng, tiến hành thanh toán và đến bước cuối cùng, sau đó anh ấy / cô ấy nhấn nút "gửi đơn đặt hàng" và không có gì xảy ra. Đằng sau hậu trường, JS của Magento thực hiện một yêu cầu AJAX và JS sẽ nhận lại JSON, nhưng nếu lỗi này xảy ra, HTML của trang đăng nhập được trả về, không thể phân tích cú pháp bằng JavaScript và nó không làm gì cả. Đó là siêu khó hiểu cho người dùng.
Chà, đó không phải là kịch bản người dùng hoàn chỉnh, chúng tôi đã liên hệ với người dùng và họ nói với chúng tôi rằng họ đã chờ đợi trong vài ngày giữa việc điền vào giỏ hàng và gửi đơn đặt hàng, điều đó có nghĩa là khó hiểu vì mọi người chỉ đơn giản là không nhớ điều đó.
Tuổi thọ phiên PHP - 350000 (~ 4 ngày trong giây) Tuổi thọ cookie - 345600 (4 ngày)
Đây là câu hỏi thực tế: làm thế nào tôi có thể tìm ra loại hành vi người dùng nào dẫn đến ngoại lệ?
CẬP NHẬT Cho đến nay tôi biết rằng ngoại lệ xảy ra trong các lớp sau theo yêu cầu được thực hiện, với tôi điều đó có nghĩa là không có gì đáng tiếc.
/catalogsearch/result/?q=… Mage_Core_Model_Session
/checkout/cart/ Mage_Core_Model_Session
/checkout/onepage/saveOrder/… Mage_Rss_Model_Session
/customer/account/loginPost/ Mage_Core_Model_Session
/customer/account/loginPost/ Mage_Reports_Model_Session
/customer/account/logout/ Mage_Reports_Model_Session
/catalog/product/view/… Mage_Reports_Model_Session
/catalog/product/view/… Mage_Tag_Model_Session
CẬP NHẬT 2 : các phiên được lưu trữ trong các tệp và được dọn sạch bởi trình thu gom rác phiên PHP, cho dù đây có phải là một lựa chọn tốt hay không nằm ngoài phạm vi của câu hỏi này.