在生产服务器 codeigniter 3.1.2(PHP) Session Destroy 上自动从 facebook graph API 重定向?

Posted

技术标签:

【中文标题】在生产服务器 codeigniter 3.1.2(PHP) Session Destroy 上自动从 facebook graph API 重定向?【英文标题】:On Production server codeigniter 3.1.2(PHP) Session Destroy automatically redirect from facebook graph API? 【发布时间】:2017-10-07 10:04:10 【问题描述】:

codeigniter session 在从图形 APi facebook 重定向时破坏,有时它会工作,有时它会破坏会话并将用户带到登录页面

这里是 Config.php 会话代码

$config['see_driver'] = 'database';
$config['see_cookie_name'] = 'ci_session';
$config['see_expiration'] = 0;
$config['see_save_path'] = 'ci_sessions';
$config['see_match_ip'] = FALSE;
$config['see_time_to_update'] = 10000;
$config['see_regenerate_destroy'] = FALSE;

这就是我在登录后设置用户会话并从 User_controller.php

中的数据库进行身份验证的方式
private function __set_user_session($user)
    
        if(isset($user))
        
            $data = [
                'user_id' => $user['id'],
                'ilocal_user_id' => $user['ilocal_user_id'],
                'package_id' => $user['package_id'],
                'no_available_business' => $user['no_available_business'],
                'name' => $user['name']
             ];

            $this->session->set_userdata($data);
        
    

在 facebook 连接和重定向后,调用此方法并自动重定向到登录页面上的用户,我不知道他为什么要破坏会话

public function connect_facebook_account($business_id)
    
        $this->__load_business($business_id);
        try
        
            if(isset($this->data['business'] ))
            
                $this->fb = new Facebook();
                $this->data['facebook_url'] =  $this->fb->get_login_url($business_id);
                if(isset($_GET['code']))
                
                    $social_acccount_info = $this->fb->fetch_access_token();
                    if($social_acccount_info['status'] === TRUE)
                    
                        $social_acccount_info['business_id'] = $business_id;
                        // save data of connected account
                        $this->__create_social_account($social_acccount_info);

                        redirect($this->session->social_page_redirect);
                    
                

                if (is_page_connected($business_id) === NULL)
                
                    $this->data['pages'] = $this->fb->fetch_facebook_pages($business_id);
                


            

        
        catch(Exception $e)
        
            $this->session->set_userdata('message', $e->getMessage() );
        

    

这段代码在本地主机上运行良好,有时也可以在生产服务器上运行,但大多数时候它会破坏生产会话但在本地机器上运行?

有什么办法吗?

【问题讨论】:

可能是您在代码过滤器中的某处重新启动会话.. 您将会话绑定到屏幕分辨率是否有更改? 是会话绑定到屏幕@Yevgen 【参考方案1】:

这是一个常见问题,几个月前我花了很多时间跟踪。本文提供了一个很好的解决方法,但不是完整的解决方案……一般来说就像一个魅力。

http://blog.thecodingbox.me/codeigniter-frequent-session-expiration-fix/

【讨论】:

如果您将本文中的一些最重要的内容和简短信息连同链接一起放入答案中,那就太好了,因为它将来可能会被破坏。【参考方案2】:

确保在您的 config.php 文件中使用了正确的数组键;改变:

$config['see_driver'] 

$config['sess_driver']

..等等

还要确保所有环境的会话 cookie 名称不同,这可能会导致在本地开发和检查生产/开发站点时丢失会话。

【讨论】:

【参考方案3】:

在 config.php 中试试下面的代码

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

【讨论】:

【参考方案4】:
$config['sess_driver'] = 'files';    
$config['sess_cookie_name'] = 'ci_session';    
$config['sess_expiration'] = 7200;    
$config['sess_save_path'] = NULL;     
$config['sess_match_ip'] = FALSE;     
$config['sess_time_to_update'] = 600;    
$config['sess_regenerate_destroy'] = FALSE;    

在 config.php 中试试这个代码 如果 $config['sess_expiration'] =0 它将重定向到您提到的路线。根据您方便的时间以秒为单位设置会话时间,并在 $config['sess_expiration'enter code here] = 3600 中更新 1 小时。如果你想自动更新会话时间,那么 $config['sess_time_to_update'] = 600;应该以秒为单位。

【讨论】:

以上是关于在生产服务器 codeigniter 3.1.2(PHP) Session Destroy 上自动从 facebook graph API 重定向?的主要内容,如果未能解决你的问题,请参考以下文章

如何设置正确的codeigniter base url?

在 codeigniter 3.1.2 中,登录表单提交导致身份验证失败

SSL 连接已意外关闭

Yii2 或 Laravel5 是不是弥补了 Codeigniter 的弱点?

CI框架 -- 开发环境生产环境

在远程服务器上配置 codeigniter(404 未找到)