0

我将 Codeigniter 与 Tank Auth 身份验证库一起使用。当用户到达需要登录的页面并且他没有登录时,他将被重定向到登录页面。

问题:在本地主机上,当我刷新网页非常频繁时,页面开始加载可能需要长达 30 秒!有时,在等待页面加载后,我似乎已经注销,因为加载的页面是我被重定向到的登录页面。在实时服务器上,页面加载之前的长时间延迟不会发生,但用户可以看似随机地退出。

这里发生了什么事?如何找出导致加载时间过长的代码部分?是什么导致了随机注销?

PHP 代码(控制器)

function index() {
    $this->load->module('auth');
    if(!$this->auth->tank_auth->is_logged_in()) {
         redirect('login');
    } 
// If user registered/logged in after landing on another page
    if($this->session->userdata('entry_url')) {
        $entry_url = $this->session->userdata('entry_url');
        $this->session->unset_userdata('entry_url');
        redirect($entry_url);   // redirect back to entry url before registration/login
    }

    // Set User Session Variables
    $user_id = $this->session->userdata('user_id');
    $this->load->model('main_model');
    $name = $this->main_model->get_user_first_last_name($user_id);
    $this->session->set_userdata('first_name', $name['first_name']);
    $this->session->set_userdata('last_name', $name['last_name']);

    $this->load->view('main');

配置文件

$config['sess_cookie_name']     = 'cisession';
$config['sess_expiration']      = 0;
$config['sess_expire_on_close'] = FALSE;
$config['sess_encrypt_cookie']  = FALSE;
$config['sess_use_database']    = TRUE;
$config['sess_table_name']      = 'ci_sessions';
$config['sess_match_ip']        = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update']  = 300;

$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;
4

2 回答 2

0

您的两个问题基本上都是在要求我们告诉您如何调试代码...如果您需要查看脚本的时间,请进行一些 microtime() 调用并输出差异以获得相当准确的执行时间。

至于随机注销,实际上任何人都可以在不查看源代码的情况下提供帮助……您应该将范围缩小到不仅仅是“可能导致这种情况的原因”。任何事情都可能导致它,如果没有更多信息,我们无法提供相关的见解。

另外,你试过什么?

于 2012-04-06T04:56:22.767 回答
0

使用 profile 和 benchmark 类来分析你的代码。 http://codeigniter.com/user_guide/libraries/benchmark.html

此外,如果您有会话 cookie,请检查其大小。也许它超出了允许的限制 (4096),这可能是导致用户注销的原因。

于 2012-04-06T09:38:02.630 回答