Làm cách nào để đặt thời gian chờ phiên trong yii2?

Xử lý phiên là phần quan trọng nhất trong Máy chủ trong Yii Framework 2. 0. Cửa hàng phiên là một cách để lưu trữ thông tin giá trị được sử dụng trên nhiều trang để kiểm tra từng yêu cầu của người dùng. Trong PHP đơn giản như as a , mọi người chúng ta đều có thể truy cập vào kho lưu trữ phiên thông qua các biến toàn cục được sử dụng để $_SESSION

Tôi đã sử dụng chức năng yii2 tích hợp để thiết lập phiên. Tôi không thể sử dụng thông tin đăng nhập yii2 tích hợp vì một số yêu cầu

Vì vậy, tôi đã đặt phiên sử dụng bên dưới

yii. $app->session->set['unique_code', 'xxxx'];

và trong cấu hình/chính của tôi. tập tin php

'session' => [
        // this is the name of the session cookie used for login on the frontend
        'name' => 'project-frontend',
        'timeout' => 60*60*24*30,
    ],

Nhưng người dùng vẫn đăng xuất khỏi trang web sau một thời gian

Vậy làm cách nào để tăng thời gian chờ của phiên trong trường hợp này?

Giải pháp tốt nhất

Tôi sẽ đề nghị bạn rằng nếu bạn chỉ muốn hủy phiên cụ thể thì hãy đặt hai phiên

Yii::$app->session->set['unique_code', 'xxxx'];
Yii::$app->session->set['code_time', 'xxxx'];

Kiểm tra thời gian hiện tại với code_time, sau khi kết thúc, hãy bỏ đặt cả hai phiên

nếu bạn muốn người dùng nên đăng xuất sau một thời gian nhất định với giải pháp hiện tại

'user' => [
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => false,
        'authTimeout' => 3600, // auth expire 
    ],'session' => [
        'class' => 'yii\web\Session',
        'cookieParams' => ['httponly' => true, 'lifetime' => 3600 * 4],
        'timeout' => 3600*4, //session expire
        'useCookies' => true,
    ],

Giải pháp liên quan

Php – Cách hết hạn phiên PHP sau 30 phút

Bạn nên thực hiện thời gian chờ phiên của riêng mình. Cả hai tùy chọn được đề cập bởi những người khác [phiên. gc_maxlifetime và phiên. cookie_lifetime] không đáng tin cậy. Tôi sẽ giải thích lý do cho điều đó

Đầu tiên

phiên. phiên gc_maxlifetime
. gc_maxlifetime chỉ định số giây sau đó dữ liệu sẽ được xem là "rác" và được dọn sạch. Thu gom rác xảy ra trong khi bắt đầu phiên.

Nhưng bộ thu gom rác chỉ được bắt đầu với xác suất của phiên. gc_probability chia cho phiên. gc_divisor. Và sử dụng các giá trị mặc định cho các tùy chọn đó [tương ứng là 1 và 100], cơ hội chỉ ở mức 1%

Chà, bạn chỉ cần điều chỉnh các giá trị này để bộ thu gom rác được khởi động thường xuyên hơn. Nhưng khi bộ thu gom rác được khởi động, nó sẽ kiểm tra tính hợp lệ của mỗi phiên đã đăng ký. Và đó là tốn nhiều chi phí

Hơn nữa, khi sử dụng phiên mặc định của PHP. save_handler, dữ liệu phiên được lưu trữ trong các tệp theo đường dẫn được chỉ định trong phiên. Lưu đường dẫn. Với trình xử lý phiên đó, tuổi của dữ liệu phiên được tính vào ngày sửa đổi cuối cùng của tệp chứ không phải ngày truy cập cuối cùng

Ghi chú. Nếu bạn đang sử dụng trình xử lý phiên dựa trên tệp mặc định, hệ thống tệp của bạn phải theo dõi thời gian truy cập [atime]. Windows FAT thì không, vì vậy bạn sẽ phải nghĩ ra một cách khác để xử lý việc thu gom rác trong phiên của mình nếu bạn gặp khó khăn với hệ thống tệp FAT hoặc bất kỳ hệ thống tệp nào khác không có tính năng theo dõi thời gian. Kể từ PHP 4. 2. 3 nó đã sử dụng mtime [ngày sửa đổi] thay vì atime. Vì vậy, bạn sẽ không gặp sự cố với các hệ thống tệp không có tính năng theo dõi thời gian

Vì vậy, có thể xảy ra trường hợp tệp dữ liệu phiên bị xóa trong khi bản thân phiên đó vẫn được coi là hợp lệ do dữ liệu phiên không được cập nhật gần đây

Và thứ hai

phiên. cookie_lifetime
phiên. cookie_lifetime chỉ định thời gian tồn tại của cookie tính bằng giây được gửi tới trình duyệt. […]

Vâng đúng vậy. Điều này chỉ ảnh hưởng đến thời gian tồn tại của cookie và bản thân phiên đó vẫn có thể hợp lệ. Nhưng nhiệm vụ của máy chủ là vô hiệu hóa một phiên chứ không phải máy khách. Vì vậy, điều này không giúp được gì. Trên thực tế, có phiên. cookie_lifetime được đặt thành 0 sẽ biến cookie của phiên thành cookie phiên thực chỉ hợp lệ cho đến khi đóng trình duyệt

Kết luận / giải pháp tốt nhất

Giải pháp tốt nhất là thực hiện thời gian chờ phiên của riêng bạn. Sử dụng dấu thời gian đơn giản biểu thị thời gian của hoạt động cuối cùng [i. e. request] và cập nhật nó với mọi yêu cầu

if [isset[$_SESSION['LAST_ACTIVITY']] && [time[] - $_SESSION['LAST_ACTIVITY'] > 1800]] {
    // last request was more than 30 minutes ago
    session_unset[];     // unset $_SESSION variable for the run-time 
    session_destroy[];   // destroy session data in storage
}
$_SESSION['LAST_ACTIVITY'] = time[]; // update last activity time stamp

Cập nhật dữ liệu phiên với mọi yêu cầu cũng thay đổi ngày sửa đổi của tệp phiên để phiên không bị bộ thu gom rác xóa sớm

Bạn cũng có thể sử dụng dấu thời gian bổ sung để tạo lại ID phiên theo định kỳ để tránh các cuộc tấn công vào phiên như cố định phiên

if [!isset[$_SESSION['CREATED']]] {
    $_SESSION['CREATED'] = time[];
} else if [time[] - $_SESSION['CREATED'] > 1800] {
    // session started more than 30 minutes ago
    session_regenerate_id[true];    // change session ID for the current session and invalidate old session ID
    $_SESSION['CREATED'] = time[];  // update creation time
}

ghi chú

  • session.gc_maxlifetime ít nhất phải bằng thời gian tồn tại của trình xử lý hết hạn tùy chỉnh này [trong ví dụ này là 1800];
  • nếu bạn muốn hết hạn phiên sau 30 phút hoạt động thay vì sau 30 phút kể từ khi bắt đầu, bạn cũng cần sử dụng setcookie với thời gian hết hạn là
    Yii::$app->session->set['unique_code', 'xxxx'];
    Yii::$app->session->set['code_time', 'xxxx'];
    
    0 để giữ cho cookie phiên hoạt động

Php – Yii2 Advanced – Tạo backend sử dụng bảng ‘admin’ và mô hình ‘Admin’

Tôi đã giải quyết vấn đề này. ]

Bạn phải chỉnh sửa cấu hình chính của từng [giao diện người dùng và phụ trợ] và chỉ định 'identityClass' cho thành phần người dùng, đồng thời thêm 'phiên' và 'yêu cầu' vào danh sách

Làm cách nào để tăng thời gian chờ của phiên trong yii2?

Hiển thị hoạt động trên bài đăng này. Tôi sẽ đề nghị bạn rằng nếu bạn chỉ muốn hủy phiên cụ thể thì hãy đặt hai phiên. Yii. $app->session->set['unique_code', 'xxxx']; . $app->session->set['code_time', 'xxxx']; Kiểm tra thời gian hiện tại bằng code_time, sau khi kết thúc, hãy bỏ đặt cả hai phiên.

Làm cách nào để nhận giá trị phiên trong yii2?

Truy cập dữ liệu phiên . $session = Yii. $app->session; // lấy biến phiên. Các cách sử dụng sau đây là tương đương. $language = $session->get['ngôn ngữ'];

Chủ Đề