# 退出會話
退出會話的原理也非常簡單,我們在前面檢驗是否登錄都是通過 `Session` 來判斷,現在只需要刪除對應的 `Session` 就大功告成了.
首先修改前端,添加一個退出的按鈕
`resources\views\_layout\header.blade.php`:
~~~~ html
~
<a class="btn btn-outline-success my-2 my-sm-0"
href="{{ url('user/auth/read', ['id' => session('user.id')]) }}">
{{ session('user.name') }}
</a>
~
@if(session('user'))
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle"
type="button"
id="dropdownMenuButton"
data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false">
{{ session('user.name') }}
</button>
<div class="dropdown-menu"
aria-labelledby="dropdownMenuButton">
<a class="dropdown-item"
href="{{ url('user/auth/read', ['id' => session('user.id')]) }}">個人主頁</a>
<a class="dropdown-item">
<form action="{{ url('user/session/delete', ['id' => session('user.id')]) }}"
method="POST">
<input type="hidden"
name="__token__"
value="{{ $token }}" />
<button class="btn btn-block"
type="submit"
name="button">退出</button>
</form>
</a>
</div>
</div>
@else
<a class="btn btn-outline-success my-2 my-sm-0"
href="{{ url('user/auth/create') }}">注冊</a>
<a class="btn btn-outline-success my-2 my-sm-0"
href="{{ url('user/session/create') }}">登錄</a>
@endif
~~~~
此時再刷新頁面,會提示 `token` 未定義,我們需要為 `read` 方法添加 `token`
`application\user\controller\Auth.php`:
~~~~ php
public function read($id)
{
if (Session::has('user')) {
$user = User::find($id);
$token = $this->request->token('__token__', 'sha1');
$this->assign([
'user' => $user,
'token' => $token
]);
return $this->fetch();
} else {
return redirect('user/session/create')->with('validate','請先登錄');
}
}
~~~~
現在再次刷新前端頁面,可以正常輸出了.
在前端的 `退出` 按鈕里,我們創建了一個 `DELETE` 方法的表單,現在需要實現退出功能.
`application\user\controller\Session.php`:
~~~~ php
public function delete($id)
{
if (SessionFacade::has('user') && $id === SessionFacade::get('user.id')) {
SessionFacade::delete('user');
return redirect('user/session/create')->with('validate','您已退出');
} else {
return '非法請求';
}
}
~~~~
刪除 `Session` 并重定向到登錄頁面,退出功能已經完成.
- 第一章. 基礎信息
- 1.1 序言
- 1.2 關于作者
- 1.3 本書源碼
- 1.4 反饋糾錯
- 1.5 安全指南
- 1.6 捐助作者
- 第二章. 開發環境布置
- 2.1 編輯器選用
- 2.2 命令行工具
- 2.3 開發環境搭建
- 2.4 瀏覽器選擇
- 2.5 第一個應用
- 2.6 Git 工作流
- 第三章. 構建頁面
- 3.1 章節說明
- 3.2 靜態頁面
- 3.3 Think 命令
- 3.4 小結
- 第四章. 優化頁面
- 4.1 章節說明
- 4.2 樣式美化
- 4.3 局部視圖
- 4.4 路由鏈接
- 4.5 用戶注冊頁面
- 4.6 集中視圖
- 4.7 小結
- 第五章. 用戶模型
- 5.1 章節說明
- 5.2 數據庫遷移
- 5.3 查看數據表
- 5.4 模型文件
- 5.5 小結
- 第六章. 用戶注冊
- 6.1 章節說明
- 6.2 注冊表單
- 6.3 用戶數據驗證
- 6.4 注冊失敗錯誤信息
- 6.5 注冊成功
- 6.6 小結
- 第七章. 會話管理
- 7.1 章節說明
- 7.2 會話
- 7.3 用戶登錄
- 7.4 退出
- 7.5 小結
- 第八章. 用戶 CRUD
- 8.1 章節說明
- 8.2 重構代碼
- 8.3 更新用戶
- 8.4 權限系統
- 8.5 列出所有用戶
- 8.6 刪除用戶
- 8.7 訪客模式
- 8.8 優化前端
- 8.9 小結
- 第九章. 微博 CRUD
- 9.1 章節說明
- 9.2 微博模型
- 9.3 顯示微博
- 9.4 發布微博
- 9.5 微博數據流
- 9.6 刪除微博
- 9.7 小結