我有一个使用codeigniter的Web应用程序,用户大约有200个。如果大约有100个用户同时登录系统,有时用户会自动注销或重定向到登录页面而不点击退出。
我的代码。
登录助手(在Construst中加载以检查登录与否)
function is_logged_in()
{
//Get Codeigniter Instance
$obj =& get_instance();
$is_logged_in = $obj->session->userdata('LOGGED_IN');
if(!isset($is_logged_in) || $is_logged_in != true)
{
$obj->session->set_flashdata('message','<div class="error_login"><b>ERROR:</b> Silahkan login terlebih dahulu.</div>');
//If no session, redirect to login page
redirect('login', 'refresh');
}
}
控制器。
public function verify()
{
$username = $this->input->post('username');
$password = $this->input->post('password');
//Query the database
$row = $this->Loginmodel->verify($username,$password);
if (count($row)) {
$dataSession = array(
'userid' => $row->userid,
'role' => $row->role,
'prov_cd' => $row->prov_cd,
'kab_cd' => $row->kab_cd,
'LOGGED_IN'=> true,
'MODAL'=> true
);
$this->session->set_userdata($dataSession);
redirect('dashboard','refresh');
}
else
{
$this->session->set_flashdata('message','<div class="error_login"><b>ERROR:</b> Username atau password salah.</div>');
redirect('login','refresh');
}
}
我认为这是因为我在会话数据中存储了许多参数。感谢。
答案 0 :(得分:1)
请查看您的计数($行),请指定它
COUNT($row) == 1
所以我理解你要做什么,如果$ row返回0,那么用户名密码没有验证,如果它返回单个用户示例
== 1
然后用户名是正确的并且确认了。试试这个解决方案。
根据php文档,它不会返回布尔值true或false。试试吧。还有什么错误?
同样为了进一步实现,我引用“计算数组中的所有元素,或对象中的某些内容”。所以只需要打电话
COUNT($row) { // If it is true or not will not work
我怀疑你必须明确说明计数是否= = 1然后是的我们确实得到了一个关于查询的回报让这个人继续。
好吧我还会从CI角度更多地讨论这个话题!
我怀疑你没有检查你的会话是否被设置......我建议你创建一个MY_Controller情况。它非常容易,并且可以减少麻烦......
请看一下这段代码:
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class MY_Controller extends CI_Controller { // Create your custom controller
public function __construct() {
parent::__construct();
}
}
然后在同一文件中执行以下操作:
类MY_logincontroller扩展MY_Controller {//扩展您在上面创建的类</ p>
public function __construct() {
parent::__construct();
$this -> load -> model('login_model'); // Load your login model
$loggedin = $this -> session -> userdata('loggedin'); // set your user information
$username = $this -> session -> userdata('username'); // Set your user information
if ((!isset($loggedin)) || ($loggedin != TRUE)) { // This will check if the the session variable is set or if it is equal to logged in, if not it will send to a access denied page
$this -> session -> unset_userdata('loggedin'); // If access denied happens unset user data logged in (just to be sure) and destroy all other session stuff
$this -> session -> sess_destroy();
$this -> load -> view('messages/accessdenied_view');
$this -> output -> _display();
die();
}
$this -> output -> set_header('Last-Modified: ' . gmdate("D, d M Y H:i:s") . ' GMT');
$this -> output -> set_header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
$this -> output -> set_header('Pragma: no-cache');
$this -> output -> set_header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
}
希望这能为你清除一些东西