检查用户是否登录的最安全方法是什么?我正在使用php的框架,codeigniter。
$loggedIn = $this->session->userdata('is_logged_in'); // returns 1
if($loggedIn == true): ?>
// do something
<?php endif; ?>
这段代码是在控制器中还是在视图中是否重要?
检查用户是否登录的最安全方法是什么?我正在使用php的框架,codeigniter。
$loggedIn = $this->session->userdata('is_logged_in'); // returns 1
if($loggedIn == true): ?>
// do something
<?php endif; ?>
这段代码是在控制器中还是在视图中是否重要?
好吧,视图用于表示逻辑,在这种情况下,您应该将代码保留在控制器中,但如果它与视图相关,例如,如果您有导航并且如果您为登录用户显示不同的菜单,那么您可以在您的控制器中使用
$loggedIn = $this->session->userdata('is_logged_in');
// ....
$data['loggedIn'] = $loggedIn;
$this->load->view('viewname', $data)
并将变量从控制器传递给视图,然后在视图中您可以检查
<?php if($loggedIn ): ?>
// Show menu for logged in user
<?php else: ?>
// Show a different menu
<?php endif; ?>
只保留一些loops
喜欢在视图foreach
中构建菜单或填充dropdown
等和if
语句(在需要时)。
当您_construct
成为控制器时,您可以从一开始就发现他们是否已登录。如果不是,请将它们发送到登录屏幕:
function __construct() {
parent::__construct();
if (!$this->session->userdata('logged_in')) {
redirect('YourLoginController');
}
}
这绝对应该在控制器中。
您还可以创建一个基本控制器来扩展您的常规,在文档中CI_Controller
查找概念。MY_Controller
在那里,您可以添加一个方法来检查身份验证并在没有时重定向,然后在需要身份验证的控制器方法中调用它:
class MY_Controller extends Controller{
public $data = array();
function _construct() {
parent::_construct();
$data['logged_in'] = $this->session->userdata('logged_in');
}
function authenticated() {
if (!$this->data['logged_in']) {
redirect('YourLoginController');
}
}
}
然后在您的控制器中:
class Some_Controller extends MY_Controller {
function _construct() {
parent::_construct();
}
// If a method requires authentication
function someMethod() {
$this->authenticated(); //This does nothing if logged in
//It redirects to login if not logged in
//Your stuff.
}
//If a method DOESN'T require login, your $this->data to
//pass to the view has already been started from MY_Controller
//so append the display content you need to that array and
//then pass it to the view
function someOtherMethod() {
$this->data['somecontent'] = "I'm content";
$this->load->view('someView',$this->data);
}
}
使用从创建的概念,someOtherMethod()
您可以利用$logged_in
视图中的变量来根据用户的身份验证状态更改内容。
代码最好放在控制器中,这样您就可以根据用户是否登录来显示正确的视图。安全的?你想避免什么?使用 CI,这是检查用户当前是否登录的最常用方法……只要您is_logged_in
正确设置变量。
虽然代码可以在视图文件和控制器文件中工作,但将代码保存在控制器中是一个更好的主意,这不仅是为了 MVC 理念,而且将其保存在控制器中也更有效。
原因是您的视图文件是从控制器加载的。这意味着如果用户未登录,您的控制器和视图文件仍将被解释,尽管它们并非必须如此。如果您在控制器中检查会话,一旦控制器得知会话丢失,它就可以停止解释其余代码并执行一些其他操作,例如将用户重定向到不需要身份验证的页面。