多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 退出会话 退出会话的原理也非常简单,我们在前面检验是否登录都是通过 `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` 并重定向到登录页面,退出功能已经完成.