12/10/2018, 17:11

Session trong Laravel

Khi hệ thống HTTP không có chỗ lưu trữ, sessions cung cấp một cách để lưu thông tin từ các yêu cầu của người dùng. Laravel cung cấp đầy đủ session backends thông qua API để hỗ trợ việc này. Hỗ trợ các backend như Memcached, Redis, và cơ sở dữ liệu đã có sẵn.

Khi hệ thống HTTP không có chỗ lưu trữ, sessions cung cấp một cách để lưu thông tin từ các yêu cầu của người dùng. Laravel cung cấp đầy đủ session backends thông qua API để hỗ trợ việc này. Hỗ trợ các backend như MemcachedRedis, và cơ sở dữ liệu đã có sẵn.

Cấu hình

File cấu hình session lưu ở config/session.php. Hãy chắc rằng bạn nắm rõ tất cả các thông tin cấu hình của session trước khi tùy chỉnh lại tệp tin này. Mặc định, Laravel sẽ cấu hình sử dụng filesession driver, nó sẽ hoạt động tốt cho nhiều ứng dụng. Đối với production, bạn có thể cân nhắc sử dụng memcached hoặc redis drivers để cho hiệu năng của session tốt hơn.

Các session driver được định nghĩa là nơi lưu trữ dữ liệu session qua các request. Laravel đã tích hợp sẵn một số session driver sau:

  • file - sessions sẽ lưu tại storage/framework/sessions.
  • cookie - sessions sẽ lưu có bảo mật, mã hóa cookies.
  • database - sessions sẽ lưu trong cơ sở dữ liệu được dùng trong ứng dụng của bạn.
  • memcached / redis - sessions sẽ lưu và truy suất nhanh hơn, dựa trên cache.
  • array - sessions sẽ được lưu trong mảng PHP và sẽ tồn tại lâu.

Trong file config/session.php

   'driver' => env('SESSION_DRIVER', 'file'),
   //nơi lưu trữ session

    'lifetime' => 120,
    //thời gian tồn tại của session được tính theo phút

    'expire_on_close' => false,
    //nếu là true thì tắt trình duyệt sẽ mất session,false thì ngược lại

Để sử dụng được session thì ta phải đặt trong middleware web

Ví Dụ

Route::group(['middleware'=>'web'],function(){
 
    Route::get('/route-session',function(){
 
        session()->put('session','Laravel');
 
        echo session('session');
         
    });
});

 

2.Các hàm trong session

- Các sử dụng 

- session::phuongthuc;

- session()->phuongthuc;

- Các hàm trong session

Ví dụ về các hàm trong session

ví dụ  (put)

Route::group(['prefix'=>'admin','middleware'=>'auth'],function(){
	
	Route::get('/route-session',function(){

		session()->put('session','Laravel');
		
		echo session()->get('session');
        // hoặc dùng echo session('session);
        // Lấy dữ liệu t dùng get() để lấy giá trị của session
		// Kết quả trả về là Laravel
	});

Ví dụ kiểm tra tồn tại session chưa t dùng hàm has()

Route::group(['prefix'=>'admin','middleware'=>'auth'],function(){

	Route::get('/route-session',function(){

		session()->put('session','Laravel');
		
		if (session()->has('session')) {
			echo 'Session đã tồn tại';
		}else{
			echo 'Không tồn tại session';
		}
                //kết quả là Session đã tồn tại
	});

 

Ví dụ xóa 1 session và xóa tất cả session

Route::group(['prefix'=>'admin','middleware'=>'auth'],function(){

	Route::get('/route-session',function(){

		session()->put('session','Laravel');
		
		session()->put('haivan','Hasonhaivan');

  		session()->forget('haivan');
  		//xóa từng session mà mình muốn
  		//kết quả là session haivan bị xóa

  		session()->flush();
  		//xóa tất cả session đang tồn tại
  		//kết quả là đã xóa tất cả session
		echo session('session');

		echo "<br>";

		echo session('haivan');

	});

Ví dụ flash

Thỉnh thoảng bạn có một vài dữ liệu mà chỉ muốn nó lưu tại lần truy xuất tiếp theo. Bạn có thể dùng phương thức flash. Dữ liệu lưu trong session sử dụng phương thức trên chỉ tồn tại duy nhất trong lần HTTP request tiếp theo, sau đó sẽ tự động được xóa. Flash data thường dùng để biểu thị các trạng thái, thông báo, tin nhắn

Route::group(['middleware'=>'web'],function(){
 	
 	Route::get('/session',function(){
 		session()->put('khoahoc','Laravel');

 		session()->put('laptrinh','lap trinh laravel');

 		Session::put('laravel','Lavel');
 		session()->flash('mess','Tin Nhan');

 		echo session('laravel');

 		echo "<br>";
 		echo 'Đã thành công';
 		echo "<br>";
 		
 		echo "<br>";
 		echo session('laptrinh');
 		 echo "<br>";
 		
 	});
 	Route::get('/mess',function(){
 		echo session('mess');
 	});

});
+2