【问题标题】:Code Ignitor Session and page loading issueCodeigniter 会话和页面加载问题
【发布时间】:2021-11-09 07:53:48
【问题描述】:

我对 codeignitor 会话有一个问题。我创建了一个名为“Welcome.php”的控制器,其中包含三个功能。一个是index,第二个是home,最后一个是getAjaxTestData.

当我在浏览器 (http://localhost:9019/welcome) 中加载欢迎控制器时,它会默认调用 index 函数并设置一些会话并加载欢迎视图。在视图文件中,我将 ajax 请求发送到 getAjaxTestData 函数,并在该函数中设置睡眠 50 秒。

调用 ajax 请求后,它会等待 50 秒。同时,如果我通过调用 Home 函数链接“https://localhost:9019/welcome/home”打开另一个链接,则在上一个 ajax 请求完成之前不会加载。

只有在我设置会话时才会发生这种情况。如果我不设置会话,那么即使我在 getAjaxTestData 函数中设置了睡眠,那么 https://localhost:9019/welcome/home 也会立即打开。

下面是我的控制器-您能检查一下..为什么在使用会话时其他页面正在等待加载,直到上一页 ajax 请求完成?有什么问题吗?

我的Welcome.php 控制器中的代码

public function index()
    {
            
            $newdata = array(
                    'user_id' => "123",
                    'username' => "siddu",
             );
            
            $this->session->set_userdata($newdata);
            session_write_close();
            $this->load->view('welcome_message');
    }
        public function getAjaxTestData()
        {
            //echo "<pre>";print_r($this->session->userdata);echo "</pre>";die();
            sleep(15);
            $data=array();
            $data['success']=0;
            $data['start_time']=date("Y-m-d h:m:s");
            
            $data['end_time']=date("Y-m-d h:m:s");
            $data['success']=1;
            echo json_encode($data);
            die();
        }
        function Home()
        {
            $this->load->view('home');
        }

【问题讨论】:

    标签: ajax performance codeigniter session sleep


    【解决方案1】:

    您的代码没有任何问题。 CodeIgniter 重写 Session 库,默认加锁,防止使用同一个 session 的两个 HTTP 请求同时运行。查看代码点火器文档here

    【讨论】:

      【解决方案2】:

      @Canh 的回答是正确的。

      我最近在我的 CI3 上遇到了同样的问题,并通过扩展会话库并使用session_write_close(按照文档中的建议)来解锁写入会话的所有方法上的会话,我可以找到:

      // Relative path: application/libraries/Session/MY_Session.php
      class MY_Session extends CI_Session {
          public function __construct(array $params = array())
          {
              parent::__construct($params);
              session_write_close();
          }
      
          public function mark_as_flash($key)
          {
              @session_start();
              parent::mark_as_flash($key);
              session_write_close();
          }
      
          public function unmark_flash($key)
          {
              @session_start();
              parent::unmark_flash($key);
              session_write_close();
          }
      
          public function mark_as_temp($key, $ttl = 300)
          {
              @session_start();
              parent::mark_as_temp($key, $ttl);
              session_write_close();
          }
      
          public function unmark_temp($key)
          {
              @session_start();
              parent::unmark_temp($key);
              session_write_close();
          }
      
          public function __set($key, $value)
          {
              @session_start();
              parent::__set($key, $value);
              session_write_close();
          }
      
          public function set_userdata($data, $value = NULL)
          {
              @session_start();
              parent::set_userdata($data, $value);
              session_write_close();
          }
      
          public function unset_userdata($key)
          {
              @session_start();
              parent::unset_userdata($key);
              session_write_close();
          }
      
          public function set_tempdata($data, $value = NULL, $ttl = 300)
          {
              @session_start();
              parent::set_tempdata($data, $value, $ttl);
              session_write_close();
          }
          public function unset_tempdata($key)
          {
              @session_start();
              parent::unset_tempdata($key);
              session_write_close();
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2012-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-10
        相关资源
        最近更新 更多