【问题标题】:session not being created by jquery ajax会话不是由 jquery ajax 创建的
【发布时间】:2016-12-22 08:45:39
【问题描述】:

我正在使用 Codeigniter 3.1.2 并尝试在我的应用中实现 Facebook 登录。当用户登录并授权我的应用程序时,我想在我的数据库中保存一些用户信息,然后创建会话。

除了创建会话外一切正常,这就是用户在成功授权我的应用后没有登录到我的应用的原因。

点击 FB 登录按钮,下面的代码正在触发

FB.login(function (response) {
        if (response.status === 'connected') {
            var site_url = $('#site_url').val();
            $.ajax({
                url: site_url + 'weapons/register',
                type: 'post',
                data: {
                    email: response.email
                }
            });
            window.location.href = '<?php echo site_url_tr('profile'); ?>';
        }
    }, {scope: 'public_profile,email'});

这是我的注册方法

public function register() {
        $email = $this->input->post('email');
        $user = array(
            'email' => $email
        );
        $u = $this->pm->total_item('users', 'email', $email);
        if ($u < 1) {//if user not exist then create
            $this->db->set('reg_date', 'NOW()', FALSE);
            $user_id = $this->pm->insert_data('users', $user, TRUE);
        }else{
            $user = $this->pm->get_row('email', $email,'users');
            $user_id = $user['id'];
        }
        $user_data = array(
            'user_id' => $user_id,
            'username' => $email,
            'email' => $email,
            'user_type' => 'user'
        );
        $this->session->set_userdata($user_data);
    }

$this-&gt;session-&gt;set_userdata($user_data); 所以这是我创建会话的尝试,但它不起作用。而不是从我上面的JS 代码重定向到Profile 控制器。谢谢

我已经自动加载了session 库和驱动程序。任何想法我怎么能 当用户最授权我的应用程序时创建会话(通过 Codeigniter) 欢迎

【问题讨论】:

  • 除了异步问题 - site_url 包含什么?如果其中包含使请求跨域的任何值,则除非您添加 withCredentials 标志,否则 cookie 将不会随请求一起发送。
  • @CBroe site_url 这里&lt;?php echo site_url();?&gt;http://localhost/project_name/

标签: php jquery ajax facebook codeigniter


【解决方案1】:
  1. 确保您在文件中包含$this-&gt;load-&gt;library('session'); 或自动加载它。

  2. Ajax 调用是异步的:您在有机会完成请求之前就进行了重定向。

    $.ajax({ // 参数 }).done(函数(){ // 重定向到这里 });

希望对你有帮助。

【讨论】:

  • 是的,我已经自动加载了,包括会话库和驱动程序。在done 中也尝试了重定向,没有发生任何事情
  • 通常 response.status 包含一个代码(200 表示成功,404 未找到..)也许它来自那里。我认为您应该在客户端的 if 变量之前使用 console.log(response)。
  • 这是我的response 的控制台数据是Object {authResponse: Object, status: "connected"}
  • Type: "Post" 应该是 method: "POST" 我们可以从服务器那里得到任何反馈,告诉我们请求是否通过了?
  • 停止假设。如果你知道然后评论/回答。你说的都试过了,没用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 2019-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多