我正在尝试使用codeigniter框架创建登录过程。表单验证有效,但会话中存在问题。我无法在“ Welcome-”之后获取用户名。
controller:Main.php
<?php
class Main extends CI_Controller
{
public function login()
{
$this->load->view('login');
}
public function login_validation()
{
$this->form_validation->set_rules('username','Username','required');
$this->form_validation->set_rules('password','Password','required');
if ($this->form_validation->run())
{
$username = $this->input->post('username');
$password= $this->input->post('password');
//model
$this->load->model('myModel');
if ($this->myModel->can_login($username,$password))
{
$session_data = array('username' => $username);
$this->session->set_userdata('$session_data');
redirect(base_url().'main/enter');
}
else
{
$this->session->set_flashdata('error','Invalid Username Or Password');
redirect(base_url().'main/login');
}
}
else
{
$this->login();
}
}
function enter()
{
if ($this->session->userdata('username')!=' ')
{
echo '<h2> Welcome- '.$this->session->userdata('username').'</h2>';
echo '<a href="'.base_url().'main/logout">Logout</a>';
}
else
{
redirect(base_url().'main/login');
}
}
function logout()
{
$this->session->unset_userdata('username');
redirect(base_url().'main/login');
}
}
?>
答案 0 :(得分:0)
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let contentOfCell = data[indexPath.row]
guard let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as? CustomCell else {
return UITableViewCell()
}
cell.descriptionTextView.text = contentOfCell
let textContainerPath = UIBezierPath(rect: CGRect(x: 0, y: 0, width: cell.CellImageView.frame.width, height: cell.CellImageView.frame.height))
cell.descriptionTextView.textContainer.exclusionPaths = [textContainerPath]
return cell
}
可以将会话库加载到autoload.php文件中的另一种方法
文件位置:application / config / autoload.php
<?php
class Main extends CI_Controller
{
public function __construct()
{
parent::__construct();
// Load form helper library
$this->load->helper('form');
// Load form validation library
$this->load->library('form_validation');
// Load session library
$this->load->library('session');
$username = $this->session->userdata('username');
if (empty($username)) {
redirect('main/logout');
}
}
}
答案 1 :(得分:0)
我建议对enter()
进行一些代码重新排列,以减少一点点的代码来更好地测试用户名。
function enter()
{
if(empty($this->session->userdata('username')))
{
//base_url() accepts URI segments as a string.
redirect(base_url('main/login'));
}
// The following code will never execute if `redirect()` is called
// because `redirect()` does not return, it calls `exit` instead.
// So, you do not need an `else` block
echo '<h2> Welcome- '.$this->session->userdata('username').'</h2>';
echo '<a href="'.base_url().'main/logout">Logout</a>';
}
empty()
将是true
,代表一个空字符串NULL
,False
和其他一些东西。在这种情况下,您对空字符串或NULL
最感兴趣。 ({empty()
文档HERE。)
您可能要考虑在验证规则中添加'trim',因为它会从输入字符串中删除空白。这样可以避免有人尝试仅使用空格字符输入用户名的可能性。
否则,您的代码应该可以工作。如果没有,则很可能您没有正确配置CodeIgniter会话。堆栈溢出在此处回答了许多会话设置问题,可帮助您使其运行。