梦入琼楼寒有月,行过石树冻无烟

Laravel Session

Session即会话控制,主要将客户端的信息存储于cookie之中,这也将会带来很多问题,如果客户端禁用了cookie支持,那么session也将被禁用。在Laravel之中,Session主要提供了一种在多请求之间存储有关用户信息的方法。

Session的配置文件主要存储在config/session.php文件之中,默认的情况下session驱动四file,在生产环境中可以考虑使用memcached或是redis进行驱动,为此Leravel自带了以下几个开箱即用的驱动:

  1. file:将session存储在storage/framework.session;
  2. cookie: 将cookie存储在加密的cookie之中;
  3. database:Session将会被存储在关系型数据库之中;
  4. memcached and redis:将session存储在基于高速缓存的存储系统内;
  5. arrar:将session存储在php数组之中,但是不会被持久化。

检索 session


对于session的检索,Laravel为我们提供了一个非常友好且简洁的get方法,使用该方法可以获取指定的session信息:

web.php

1
2
3
4
5
6
7
use Illuminate\Http\Request;

Route::get('/url', function (Request $request) {
$value = $request->session()->get('_token');
print_r($value);
echo '<br>';
});

获取当前所有的 session


在Laravel框架内,如果要检索所有的数据,我们可以使用Laravel session所提供的all方法来检索所有会话数据:

web.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
use Illuminate\Http\Request;

Route::get('/', function () {
return view('welcome');
});

Route::get('/url', function (Request $request) {
$session = $request->session()->all();
print_r($session);
});

判断是否存在


在以上示例内我们主要介绍了如何获取当前的session数据,所以本次我们需要进行判断该session是否存在,如果返回yes即说明存在,返回no即不存在,本次我们主要使用exiets以及has分别进行演示:

exists

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
use Illuminate\Http\Request;

Route::get('/', function () {
return view('welcome');
});

Route::get('/url', function (Request $request) {
// 输出
$session = $request->session()->all();
print_r($session);
echo '<br>';

// 判断
if ($request->session()->exists('_token')) {
echo "yes";
} else {
echo "no";
}
});

has

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
use Illuminate\Http\Request;

Route::get('/', function () {
return view('welcome');
});

Route::get('/url', function (Request $request) {
// 输出
$session = $request->session()->all();
print_r($session);
echo '<br>';

// 判断
if ($request->session()->has('_token')) {
echo "yes";
} else {
echo "no";
}
});

存储 session


在此前我们主要介绍了如何查询和判断session相关,那么如果要进行session存储需要如何实现?对此Laravel为我们提供了put方法:

web.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
use Illuminate\Http\Request;

Route::get('/', function () {
return view('welcome');
});

Route::get('/url', function (Request $request) {
// 存储
$request->session()->put('jiangxue','Jiang Xue analyzes the open knowledge repository');
session(['key'=>'value']);

// 输出
$value = $request->session()->get('jiangxue');
print_r($value);
echo '<br>';

// 判断
if ($request->session()->has('jiangxue')) {
echo "yes";
} else {
echo "no";
}
});

临时 session


临时session与临时url一样,几乎是只要你刷新过后就会被进行删除,在通常需要实现该功能可能需要很久,对于Laravel·而言,只需要使用flash方法即可:

web.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
use Illuminate\Http\Request;

Route::get('/', function () {
return view('welcome');
});

Route::get('/url', function (Request $request) {
// 存储
$request->session()->flash('jiangxue','Jiang Xue analyzes the open knowledge repository');
session(['key'=>'value']);

// 输出
$value = $request->session()->get('jiangxue');
print_r($value);
echo '<br>';

// 判断
if ($request->session()->has('jiangxue')) {
echo "yes";
} else {
echo "no";
}
});

删除 session


当然,有了存储就有了删除,如何进行删除是一个非常重要的问题,对此Laravel为我们提供了forget方法将用于删除单个session或者多个session:

web.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Route::get('/url', function (Request $request) {
// 存储
$request->session()->put('jiangxue','Jiang Xue analyzes the open knowledge repository');
session(['key'=>'value']);

// 输出
$value = $request->session()->get('jiangxue');
print_r($value);
echo '<br>';

/*
* 删除
* 如需要删除多个可使用 $request->session()->forget(['key_one', 'key_two']);
*/
$request->session()->forget('jiangxue');

// 判断
if ($request->session()->has('jiangxue')) {
echo "yes";
} else {
echo "no";
}
});
⬅️ Go back