Hướng dẫn dùng laravel sessions trong PHP

HTTP là giao thức không lưu giữ trạng thái [stateless], tức là các request sẽ độc lập với nhau, mỗi một phiên sẽ bao gồm một cặp request và response. Giao thức HTTP không yêu cầu máy chủ lưu trữ thông tin và trạng thái phiên làm việc. Khi các ứng dung web có nhiều các tính năng hơn như xác thực hoặc người phát triển mong muốn thu thập nhiều thông tin hơn từ người dùng, thông tin trao đổi giữa các request là cần thiết. Laravel Session cho phép bạn lưu trữ thông tin người dùng thông qua các request [các trang của một website] khác nhau với nhiều cách thức lưu trữ như file, cookie, Memcached, Redis hoặc cả database. Mặc định thông tin lưu trữ trong file, cấu hình cách thức lưu trữ có trong config/session.php. Laravel Cookie cũng sử dụng để lưu trữ những thông tin người dùng, vậy giữa Laravel Cookie và Laravel Session có gì giống giống nhau và phải chăng Laravel Session là thừa. Không hẳn vậy, Laravel Session giúp chúng ta lưu trữ thông tin được sử dụng ở các trang khác nhau trong cùng website khi người dùng sử dụng, còn Cookie sử dụng khi chúng ta muốn lưu trữ thông tin người dùng ở các lần truy cập website khác nhau. Ví dụ sau giúp bạn hiểu rõ hơn:

  1. Khi người dùng đăng nhập vào hệ thống, các thông tin như trạng thái đăng nhập, tên người dùng, số dư tài khoản ... sẽ cần cho tất cả các yêu cầu sau đó, ví dụ như khi người dùng vào trang thanh toán, vào trang đặt hàng... chúng ta sẽ có sẵn các thông tin cần thiết về người dùng và như vậy chúng ta sẽ dùng Laravel Session cho trường hợp này.
  2. Người dùng gửi comment, khi đó yêu cầu nhập Họ và tên, email, nội dung comment, như vậy nếu một lần sau có thể là vài tuần sau, người dùng muốn gửi comment tiếp thì chúng ta cần ghi nhớ được Họ tên và email để điền sẵn giúp người dùng không cần nhập nữa, ví dụ này chúng ta sử dụng Laravel Session.

Qua hai ví dụ trên có thể thấy Laravel Session sử dụng cho các dữ liệu cần trong một phiên làm việc, khi hết phiên [thoát ra khỏi trang] thì các dữ liệu này sẽ không còn hiệu lực, còn với Laravel Cookie sử dụng để lưu các thông tin lâu hơn cỡ hàng ngày, tuần, tháng... Làm việc với Laravel Session chúng ta chỉ cần quan tâm đến 3 việc là: lưu dữ liệu vào phiên, lấy dữ liệu ra từ phiên làm việc và xóa một dữ liệu khỏi phiên làm việc.

Truy xuất dữ liệu Laravel Session

Để lấy dữ liệu của phiên làm việc chúng ta cần một instance của phiên làm việc và sử dụng phương thức get với tham số vào là tên dữ liệu:

$value = $request->session[]->get['key'];

Có thể sử dụng phương thức all[] để lấy tất cả dữ liệu từ phiên làm việc. Để kiểm tra xem một dữ liệu có tồn tại trong phiên không chúng ta sử dụng phương thức has[]:

if [$request->session[]->has['users']] {
    //
}

Lưu dữ liệu vào Laravel Session

Để lưu dữ liệu vào phiên chúng ta sử dụng phương thức put[], phương thức này có hai tham số đầu vào là tên và giá trị:

$request->session[]->put['key', 'value'];

Xóa một dữ liệu khỏi Laravel Session

Phương thức forget[] được sử dụng để xóa dữ liệu khỏi phiên, tham số đầu vào là tên dữ liệu.

$request->session[]->forget['key'];

để xóa toàn bộ các dữ liệu khỏi phiên chúng ta sử dụng phương thức flush[]. Có một phương thức khác giống forget[] là pull[], phương thức này cũng xóa dữ liệu khỏi session nhưng trước đó nó trả về giá trị của dữ liệu.

Ví dụ về Laravel Session

Chúng ta cùng nhau thực hành một ví dụ về Laravel Session, các ví dụ thực tế giúp chúng ta hiểu về các khái niệm cũng như cách thức sử dụng tốt hơn nhiều. Ví du: khi đăng nhập xong thì phía trên menu xuất hiện thêm một menu thiết lập thông tin của người dùng [Ví dụ này tôi đưa ra để hiểu thêm về Laravel Session chứ trong Laravel việc quản lý xác thực khá đơn giản và chúng ta sẽ đi chi tiết ở những bài viết khác]: Để cho nhanh chúng ta sẽ bỏ qua các Controller mà viết code thẳng trong các route, sau khóa học này chúng ta sẽ thực hiện một project nhỏ, khi đó chúng ta sẽ sử dụng đầy đủ các thành phần. Tạo một route trong routes/web.php

Route::get['login', function[]{
  return view['fontend.login'];
}];

Tạo một view login.blade.php trong resources/views/fontend

@extends['layouts.default']

@section['title', 'Đăng nhập']

@section['content']
    @if[isset[$success]]
    
{{ $success }}
@endif @if[isset[$fail]]
{{ $fail }}
@endif {!! Form::open[array['url' => '/login', 'class' => 'form-horizontal']] !!}
{!! Form::label['username', 'Username', array['class' => 'col-sm-2 control-label']] !!}
{!! Form::text['username', '', array['class' => 'form-control']] !!}
{!! Form::label['password', 'Password', array['class' => 'col-sm-2 control-label']] !!}
{!! Form::password['password', array['class' => 'form-control']] !!}
{!! Form::submit['Login', array['class' => 'btn btn-success']] !!}
{!! Form::close[] !!} @endsection

Blade template default được tạo ra trong bài Laravel Blade, trong code có sử dụng Laravel HTML, bạn nên xem lại 2 bài này để hiểu hơn về đoạn code trên nhé. Ok, như vậy đã xong phần form đăng nhập, chúng ta truy cập //laravel.dev/login

All Laravel TEnv

  • Trang chủ
  • Ví dụ
    • Ví dụ Blade 1
    • Ví dụ Blade 2
  • Liên hệ
  • @if[Session::has['login'] && Session::get['login'] == true]
  • Xin chào {{ Session::get['name'] }}
    • Đăng xuất
  • @endif

Chúng ta thử click vào Đăng xuất, khi đó menu về người dùng sẽ biến mất trên hệ thống menu. ## Lời kết

Qua những ví dụ hết sức đơn giản, chúng ta đã hiểu được Laravel Session là gì, cách thức sử dụng như thế nào? Ví dụ về đăng nhập trong bài viết chỉ mang tính minh họa, trong Laravel đã cung cấp những tính năng như Xác thực rất mạnh mẽ, chúng ta sẽ tìm hiểu chủ đề xác thực trong những bài tiếp theo. Các bạn thấy bài viết cần góp ý gì xin để lại comment ở dưới bài, mình rất cám ơn. Chúc các bạn thực hành thành công.

Chủ Đề