2016-05-18 47 views
0

我想爲某些測試目的在會話中存儲一些數據。我已經在控制器中寫了會話代碼。但在console.log - >資源 - >會話中找不到我存儲的任何值。 如果有人幫我找到我在控制器中犯的錯誤,PHP Laravel:如何設置或獲取會話數據?

這裏是我的控制器:

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Department; 
use App\Http\Requests; 
use Cookie; 
use Tracker; 
use Session; 

public function postdepartmentSave(Request $request) 
    { 
     $this->validate($request,[ 
      'code' => 'required|min:2|max:7|unique:departments',   
      'name' => 'required|unique:departments',   
      ]); 
      $department = new Department();   
      $department->code = $request->Input(['code']);    
      $department->name = $request->Input(['name']); 
       $name= $department->name; 
     Session::put('name', $name); 
     dd($name); 
      $department->save();    
      return redirect('departmentSavePage');   
    } 

回答

6
Session::set('variableName', $value); 

爲了得到變量,你使用...

Session::get('variableName'); 
+0

當我在控制檯中看到時,爲什麼沒有在'Resources-> Session Storage'中顯示? – User57

+0

你有沒有試過去其他地方?像在視圖或控制器中。查看它是否返回值。如果沒有,那麼你確認$ name是否爲空 –

+0

$ name不爲空,因爲我已經看到它使用dd(); – User57

1

您還沒有作出一個編碼錯誤。問題在於你在服務器端會話和HTML5的sessionStorage之間有點混亂。

Chrome Developer Tools上的Resources->Session Storage視圖僅向您顯示存儲在HTML5 sessionStorage對象中的信息。這是通過客戶端JavaScript訪問的客戶端會話信息,並且與任何類型的服務器端會話信息完全分離。

例如,在您的javascript控制檯中運行sessionStorage.setItem('key', 'value');,您將看到數據顯示在Resources->Session Storage視圖中。

您的PHP/Laravel代碼正在處理服務器端會話。這些信息不會顯示在任何類型的開發人員工具視圖中,因爲它不打算被客戶端工具訪問。默認情況下,Laravel使用基於文件的會話存儲,這意味着您的會話信息存儲在服務器上的文件中(位於storage/framework/sessions)。即使您將會話存儲更改爲使用cookie,會話信息也會被加密,因此客戶端無法讀取數據。這是出於安全目的。

您可以閱讀更多關於Laravel sessions here
你可以閱讀更多關於HTML5 sessionStorage here