class Index extends Controller
{
public function index()
{
//return dump(Request::url());
return $this->fetch('start/index');
}
public function ceshi(){
return redirect('/#/login'); //这是好使的
}
}
前端是spa单页实现的,前端自己完成的路由,所有url,都是类似这种,
xxxx.com/#/login,xxx.com/#/index,xxxx/#/userinfo。
服务器端,对于这种请求,只认为他请求的是 xxxx.com/index,宿主页面,
对于#后面的一律忽略。
所以这也正是单页程序的一个特点吧。不管咋请求,服务器就是只返回index页面,也就是宿主页面。
那这种,加上会话管理,session,
如何判断是否超时,跳转到登陆页,有点尴尬。
比如有个,用户信息页面,xxxx/#/userinfo,
当用户单击,个人信息的时候,如何判断是否session超时了,如果超时就跳转到登陆页面 login页面,有点尴尬。
因为判断不了,你请求的是哪个页面,服务器会忽略你请求地址#号后面的url信息,xxxx.com/#/userinfo,再服务器端看来,其实请求的是 xxxx.com/index。
这样服务器识别不出来请求的是什么,服务器就认为请求的是 /,根。
至于后面的 #/userinfo,服务器不管他,客户端浏览器js去管。
那比如服务器这样写
public function userinfo(){
if(!session('userid')){
return redirect('/#/login');//跳转
}
}
那么请求url,xxx.com/#/userinfo,其实定位不到方法。
也就无从判断是否,超时了。
那大家是怎么处理的?
能想到的唯一的办法是,
public function userinfo(){
if(!session('userid')){
return json(['msg'=>'超时','code'=>-1]);
}
}
用ajax返回,客户端,接收,js判断,code=-1,就跳转了。
如果用户干刷新页面,不发出ajax请求,就没法知道他超时啊? 他刷新页面,就是前端处理跳转,
public function index()
{
//return dump(Request::url());
return $this->fetch('start/index');
}
走的是他。
可是,你又不能把他外层,套一个session判断,一套上,就没法工作了,啥也出不来。登录页,就不可能出来。
大家都怎么弄的啊?