Các phiên php có hết hạn không?

Bạn đang chạy Debian Linux hoặc Ubuntu Linux. Bạn muốn các phiên PHP kéo dài hơn 1440 giây mặc định (24 phút). Vì vậy, bạn làm điều này

ini_set('session. gc_maxlifetime', 10800);

Với cài đặt này, các phiên sẽ duy trì hoạt động trong ít nhất ba giờ, miễn là người dùng không đóng trình duyệt của họ. 1

Nhưng bất kể bạn làm gì, các phiên vẫn bị xóa sau 24–54 phút. Có vẻ như PHP đang bỏ qua cài đặt gc_maxlifetime

Tại sao điều này xảy ra

Debian và Ubuntu Linux ghi đè hành vi phiên của PHP. Nếu bạn nhìn kỹ, bạn sẽ thấy phiên đó. gc_probability được đặt thành 0, nghĩa là bộ sưu tập rác của PHP sẽ không bao giờ chạy. Thay vào đó, có một công việc định kỳ dành riêng cho Debian trong /etc/cron. d/php5 chạy cứ sau 30 phút

Công việc định kỳ thực hiện thu gom rác dựa trên phiên toàn cầu. gc_maxlifetime trong php. ban đầu. phiên. gc_maxlifetime trong ứng dụng của bạn bị bỏ qua

Giải pháp

Trong khi bạn có thể vô hiệu hóa công việc định kỳ và/hoặc sửa đổi php. ini, tôi muốn khắc phục sự cố mà không sửa đổi các giá trị mặc định của hệ thống. Một giải pháp tốt hơn là tạo thư mục phiên của riêng bạn, ở đâu đó bên ngoài thư mục bình thường, sau đó kích hoạt cục bộ bộ sưu tập rác phiên của PHP

Để làm điều này, thiết lập phiên. gc_maxlifetime, phiên. gc_probability, phiên. gc_divisor và phiên. Lưu đường dẫn

# Thời gian tồn tại của phiên là 3 giờ ini_set('session. gc_maxlifetime', 10800); . gc_probability', 1); . gc_divisor', 100); . Daemon máy chủ web phải có # quyền đọc/ghi vào thư mục này. session_save_path(APP_PARENT_DIR. '/ phiên');

1 Bạn có thể thay đổi cài đặt này trong php. ini, nhưng có một số lý do để không. php. ini thay đổi mọi thứ trên toàn cầu, không chỉ cho ứng dụng của bạn. Và nếu người khác thay đổi nó, ứng dụng của bạn có thể bị hỏng. Cuối cùng, nếu bạn cần triển khai ứng dụng của mình trên một máy chủ khác, bạn sẽ phải nhớ thay đổi cài đặt trong tệp php của máy chủ mới. ban đầu. Tôi luôn thích ini_set() và không bao giờ sửa đổi php. ini ngoại trừ như một phương sách cuối cùng. ↩

Trong bài viết này, chúng tôi sẽ giải thích cách tăng thời gian chờ của phiên trong PHP nhưng trước tiên, điều quan trọng là phải biết phiên là gì?

Trong PHP, các phiên được duy trì để kiểm tra xem người dùng có hoạt động hay không. Khi bạn làm việc trên một ứng dụng, bạn mở nó và thực hiện một số thay đổi rồi đóng nó lại. Khoảng thời gian này được gọi là phiên

Khi bạn đăng nhập vào bất kỳ trang web nào, một phiên mới sẽ được tạo với ID phiên duy nhất. Nó sẽ duy trì tất cả hồ sơ về các hoạt động của bạn mà bạn thực hiện trên trang web khi đăng nhập

Theo mặc định, phiên PHP hết hạn khi bạn đóng trình duyệt hoặc sau một thời gian cụ thể. Đó thường là 24 phút, nhưng nó phụ thuộc vào cấu hình máy chủ của bạn. Bạn có thể tăng thời gian chờ của phiên theo cách thủ công trong PHP tùy theo kịch bản của mình nếu bạn làm theo các bước mà bạn sẽ tìm hiểu trong bài viết này

Đầu tiên, tôi sẽ giải thích ngắn gọn ba bước liên quan đến việc bắt đầu một phiên cho đến khi phiên bị hủy

Mục lục

Bắt đầu một phiên

session_start() được sử dụng để bắt đầu phiên PHP hoặc tiếp tục phiên hiện tại trên trang web. Nó tạo ra một ID phiên duy nhất cho người dùng

session_start(); 

Biến phiên

Sau khi bắt đầu phiên, các biến phiên có thể được tạo để sử dụng trong tương lai. Nó có thể được truy cập trong suốt ứng dụng. Bạn có thể tạo một biến phiên và lưu trữ giá trị trong đó bằng cú pháp sau

$_SESSION['userName'] = "CodeLeaks"; 

hủy phiên

Chúng tôi cần hủy phiên PHP khi người dùng đăng xuất khỏi trang web. Để giải phóng tất cả các biến phiên, lệnh sau được sử dụng

session_unset(); 

Để kết thúc phiên hoàn chỉnh, lệnh sau được sử dụng

session_destroy(); 

Tăng thời gian chờ phiên trong PHP

Bạn có thể đặt giới hạn trên cho thời gian của phiên bằng cách sửa đổi các tiêu chí đó nếu các phiên được thực thi bằng cookie (gần như chắc chắn là như vậy) và ứng dụng khách không độc hại. Đặt phiên. gc_maxlifetime cùng với session_set_cookie_params đặt tham số cookie sẽ hoạt động cho bạn nếu bạn đang sử dụng xử lý phiên mặc định của PHP với cookie. Dưới đây là một ví dụ, bạn có thể sử dụng như thế này

<?php
// server should keep session data for AT LEAST 1 hour
ini_set('session.gc_maxlifetime', 3600);

// each client should remember their session id for EXACTLY 1 hour
session_set_cookie_params(3600); 

Chúng tôi đã thảo luận về các chức năng cơ bản được sử dụng để xử lý phiên. Bây giờ, hãy đến với phần chính, đó là Cách tăng thời gian chờ của phiên trong PHP

Hãy lấy một ví dụ đơn giản về biểu mẫu đăng nhập, từ đó người dùng có thể đăng nhập vào tài khoản của họ. Đối với điều này, chúng tôi có cơ sở dữ liệu của mình trong phpMyAdmin với tên “xác thực”. Trong cơ sở dữ liệu này, chúng tôi có một bảng gọi là "người dùng" có danh sách tất cả tên người dùng đã đăng ký và mật khẩu của họ

Các phiên php có hết hạn không?

Trước tiên, chúng ta cần thiết lập kết nối với cơ sở dữ liệu

<?php

$servername = "localhost";
$username = "root";
$password = "";
$dbname = "authentication";

// create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);

if ($conn) {
  # code...
  // echo "Connecton Open"; 
}
else
    echo "Connection failed";
  ?> 

Tệp chính của chúng tôi là chỉ mục. php, có một hình thức đăng nhập đơn giản. Người dùng phải nhập thông tin xác thực của mình để có thể truy cập trang chủ của trang Web

<!DOCTYPE html>
  <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap 
          /4.4.1/css/bootstrap.min.css" integrity="sha384 Vkoo8x4CGsO3+Hhxv8T 
         /Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
        <link rel="stylesheet" href="index.css">
        <title>Log in</title>
    </head>
    <body>
      <div class="wrapper mx-auto mt-5">
        <h2 class="text-center mb-4">LOG IN</h2>
        <form method="POST" action="">
          <div class="row">
            <div class="col-12">
              <input type="text" class="form control" placeholder="User Name"               
               name="username" required>
            </div>
            <div class="col-12 mt-3">
              <input type="password" class="form-control" placeholder="Password" 
              name="password" required>
            </div>
          </div>
          <input type="submit" name="login" class="btn btn-secondary mt-4 w-100 
           login-btn" value="Log In" >
        </form>
      </div>
    </body>
  </html> 

Các phiên php có hết hạn không?

Khi người dùng nhấp vào nút Đăng nhập, thông tin đăng nhập sẽ khớp với bản ghi cơ sở dữ liệu của chúng tôi để tìm xem người dùng đã đăng ký hay chưa

Nếu thông tin của người dùng khớp thì phiên bắt đầu và các biến phiên được đặt. Biến phiên $_SESSION[‘start’] được khởi tạo để lưu trữ thời gian đăng nhập. Một biến khác $_SESSION[‘expire’] tính toán thời gian mà chúng tôi sẽ sử dụng để hủy phiên của mình

Ở đây chúng tôi nhân 40 phút của mình với 60 để chuyển đổi chúng thành giây (Bạn có thể thay đổi giá trị 40 phút theo yêu cầu của mình). Sau đó nó được dẫn đến trang chủ của trang web

<?php  
    include("connection.php");
    error_reporting(0);

    if($_POST['login']) {
      $un=$_POST['username'];
      $pass=$_POST['password'];
      
      $query = "SELECT * FROM USERS WHERE user_name='$un' AND password='$pass'"; 
      $data = mysqli_query($conn,$query);
      $total = mysqli_num_rows($data);
      if($total != 0) {
        session_start();
        $_SESSION['auth'] = true;
        $_SESSION['start'] = time();
        $_SESSION['expire'] = $_SESSION['start'] + (40 * 60);
        header('location:homePage.php');
        echo "run";
      } else {
?>
    <script>
            alert("user name or password is invalid");
        </script>
        <?php
      }
    }
   

Các phiên php có hết hạn không?

Trên trang chủ, hàm session_start() được gọi để duy trì phiên. Nó cho phép chúng tôi tìm nạp các biến phiên từ trang. Câu lệnh if() được duy trì để kiểm tra xem ai đó không trực tiếp cố truy cập trang mà không cần đăng nhập. Trong trường hợp này, URL sẽ tự động chuyển hướng đến trang Đăng nhập

 

Nếu người dùng đã đăng nhập, thì thời gian hiện tại được lưu trữ trong một biến $currentTime. Thời gian hiện tại không được vượt quá thời gian chờ mong muốn mà chúng tôi đã tính toán trước đó trong “chỉ mục. trang php”. Khi thời lượng vượt quá phiên sẽ bị hủy và được chuyển hướng đến trang Đăng nhập

________số 8_______

Dưới đây là tập lệnh đăng xuất PHP được sử dụng nếu bất kỳ ai muốn đăng xuất khỏi trang trước khi hết thời gian phiên

<?php
    session_start();
    session_unset();
    session_destroy();
    header('location:index.php');
  ?> 

Phần kết luận

Tạo session trong PHP được coi là thành phần cơ bản trong một website. Trong thế giới ngày nay, hầu hết mọi trang web đều có một hệ thống để xác thực người dùng của mình và có thể có các tình huống khác nhau khi chủ sở hữu trang web muốn tạo phiên PHP trong một khoảng thời gian cụ thể. Trong bài viết này, chúng ta đã thấy cách tăng thời gian chờ của phiên trong PHP