浏览器登录验证分析
在访问到后台首页(后台所有功能)时,应该先判断当前浏览器是否处于登录状态,再做功能的实现!如果没有登录,则跳转到登录页面。
如何判断当前浏览器用户是否登录?
管理员合法–>处于登录状态
登录标志:
一个数据。
如何存储这个数据呢?
[不合理的]测试:
变量:
分配(back/AdminController->checkAction())
if($m_admin->check($admin_name,$admin_pass)){
$is_login = 'yes';
$this->_jump('index.php?p=back&c=Manage&a=index');
}else{
$this->_jump('index.php?p=back&c=Admin&a=login','管理员信息非法');
}
验证(back/ManageController->indexAction())
public function indexAction(){
if(!isset($is_login)){
$this->_jump('index.php?p=back&c=Admin&a=login');
}
}
总结:不行,原因是:
数据的生命周期问题,对于PHP来说,所有数据(变量,常量)的最大生命周期,一个脚本周期(浏览器向服务器发出一次请求,服务器将该请求交由PHP处理,PHP处理完了给服务器,服务器响应给浏览器,就是一个脚本周期)
可见:登录标志的存储,需要可以跨脚本周期存储数据的一种形式(持久性存储数据的机制)
[不合理的]测试:
文件:
不行,原因是:
在服务器端管理的文件(数据库中)是不区分浏览器端,对于任何一个浏览器都是通用的!
可见:登录标志的存储,需要可以区分浏览器,并在该浏览器的多次请求周期内,可以持久存储的一种数据存储机制!
以上的存储机制,就是会话技术!
Session完成登录状态的存储
分配:
Back/AdminController->checkAction();
if($m_admin->check($admin_name,$admin_pass)){
session_start();
session[is_login] = 'yes';
$this->_jump('index.php?p=back&c=Manage&a=index');
}else{
$this->_jump('index.php?p=back&c=Admin&a=login','管理员信息非法');
}
判断:
Back/ManageController->indexAction()
public function indexAction(){
session_start();
if(!isset(session[is_login])){
$this->_jump('index.php?p=back&c=Admin&a=login');
}
}