我是Codeigniter的新手。我在关注https://www.webslesson.info/2018/10/user-registration-and-login-system-in-codeigniter-3.html作为我的项目使用codeiginiter
制作注册和登录页面的教程。
一切都很好,但这次会议不能满足我的需要。
我想要什么:-
非登录用户还可以看到只有登录用户才能看到的私人区域
这是我的代码:
login.php控制器
defined('BASEPATH') or exit('No direct script access allowed');
class Login extends CI_Controller
{
public function __construct()
{
parent::__construct();
if ($this->session->userdata('hospital_email')) {
redirect('private_area');
}
$this->load->library('form_validation');
$this->load->library('encryption');
$this->load->model('login_model');
}
function index()
{
$this->load->view('view/login');
}
function validation()
{
$this->form_validation->set_rules('hospital_email', 'Email Address', 'required|trim|valid_email');
$this->form_validation->set_rules('pass', 'Password', 'required');
if ($this->form_validation->run()) {
$result = $this->login_model->can_login($this->input->post('hospital_email'), $this->input->post('pass'));
if ($result == '') {
redirect('private_area');
} else {
$this->session->set_flashdata('message', $result);
redirect('view/login');
}
} else {
$this->index();
}
}
}
login_model.php模型文件
class Login_model extends CI_Model
{
function can_login($email, $password)
{
$this->db->where('hospital_email', $email);
$query = $this->db->get('hospital');
if ($query->num_rows() > 0) {
foreach ($query->result() as $row) {
if ($row->is_email_verified == 'yes') {
$store_password = $this->encryption->decrypt($row->pass);
if ($password == $store_password) {
$this->session->set_userdata('hospital_email', $row->hospital_email);
} else {
return 'Wrong Password';
}
} else {
return 'First verified your email address';
}
}
} else {
return 'Wrong Email Address';
}
}
}
private_area.php控制器
defined('BASEPATH') or exit('No direct script access allowed');
class Private_area extends CI_Controller
{
public function __construct()
{
parent::__construct();
if (!$this->session->userdata('hospital_email')) {
redirect('view/login');
}
}
function index()
{
redirect('view/private_area');
}
function logout()
{
$data = $this->session->all_userdata();
foreach ($data as $row => $rows_value) {
$this->session->unset_userdata($row);
}
redirect('login');
}
}
private_area.php视图文件
echo '<br /><br /><br /><h1 align="center">Welcome User</h1>';
echo '<p align="center"><a href="' . base_url() . 'private_area/logout">Logout</a></p>';
我尝试了那些教程,没有出现任何错误。我不知道你的意思,因为你没有提供更多的细节。但我有一个关于如何检查会话值的简单解决方案
像这个一样更改Private_area.php
的函数index((
$data['user'] = $this->session->userdata('hospital_email');
$this->load->view('private_area', $data);
在您看来private_area.php
<?php
echo '<br /><br /><br /><h1 align="center">Welcome '.$user.'</h1>';
echo '<p align="center"><a href="private_area/logout">Logout</a></p>';
?>
还有另一种方法,
如何检查会话的值是否存在
将此代码放在private_area.php
视图文件的顶部:-
<?php
$hospitalSession = $this->session->userdata('hospital_email');
if($hospitalSession['hospital_email']==''){
redirect('Controller/method_name');
}
echo '<br /><br /><br /><h1 align="center">Welcome '.$user.'</h1>';
echo '<p align="center"><a href="private_area/logout">Logout</a></p>';
?>