在Internet Explorer中,Code Igniter登录、会话和重定向问题?

6

我对CodeIgniter仍不是很熟悉,现在在登录系统上遇到了问题。

在Firefox浏览器中使用时,登录总是可以成功的。但有些IE7浏览器中登录一直可用,而其他IE7浏览器则总是无法登录。

当追踪代码时,我发现models/redux_auth_model.php成功验证了用户,将用户信息写入$this->session->set_userdata(),并将其重定向到我选择的会员页面。以下是代码:

public function login($identity = false, $password = false)
{
            $identity_column = $this->config->item('identity');
            $users_table     = $this->tables['users'];

            if ($identity === false || $password === false || $this->identity_check($identity) == false)
            {
                return false;
            }

            $query = $this->db->select($identity_column.', email, password, group_id')
                           ->where($identity_column, $identity)
                           ->where('active', 'Active')
                           ->limit(1)
                           ->get($users_table);

        $result = $query->row();

        if ($query->num_rows() == 1)
        {
            //$password = $this->hash_password_db($identity, $password);

           if (!empty($result->activation_code)) { return false; }

                if ($result->password === $password)
                {
                    $this->session->set_userdata($identity_column,  $result->{$identity_column});
                    $this->session->set_userdata('email',  $result->email);
                    $this->session->set_userdata('group',  $result->group_id);
                    return true;
                }
        }

        return false;
}

我在IE7和FF中对$this->session进行了变量转储,并确认重定向之前所有的userdata都是完好无损的。会话中包含我的电子邮件信息、组信息和$identity_column信息。

然而,在一些IE7浏览器中,重定向后会话数据为空,这就是为什么CI一直让我退出系统的原因。在其他IE7浏览器中,它始终保持完整,在Firefox中也始终完整。

为什么会话数据取决于浏览器呢?

有没有什么想法进一步解决这个问题呢?我很困惑……

12个回答

7

谢谢,我也会尝试这个解决方案。不过我还没想明白如何启用本地会话。有其他的参考资料吗?谢谢。 - John
1
你只需要将session.php文件放入application/libraries中,无需更改应用程序的任何代码。 - ekhaled
请修复URL链接。它已经被更改了。 - AkshayT
今天的日期对我没用。看起来完全过时了。 - Antonio Max

6

在使用CI Session时,我也遇到了IE浏览器的同样问题。然后我在控制器构造函数中使用以下标头,这对我有效。

以下是头文件:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');


谢谢,对我也有用。 问题是某些微软策略会在IE11(可能在旧版本中也是如此)从iframe重定向/链接时删除cookie。 添加此标头后,cookie不再丢失。 - DiegoFreelancer

4

当我使用IE8浏览器模式时,遇到了同样的问题。我发现问题在于匹配用户代理。在会话数据库中,它将用户代理保存为IE7,但从cookie中获取的是IE8。我设置了$config[sess_match_useragent] = FALSE,问题得到解决。


3

会话类在我的几个项目中都可以很好地工作,包括IE6/7/8支持(包括CI的多个版本)。除了上面粘贴的代码之外,还有一些可能导致此问题的原因:

  1. 从基类(或类代码的其他位置)调用$this->session->sess_create();将重置您的会话。
  2. 尝试通过传递数组将set_userdata调用合并为一个调用。
  3. 确保您的数据中没有任何意外字符(这可能会导致某些浏览器出现问题)。
  4. 确保配置中的会话类设置不会在每个请求中滚动cookie。

或者,考虑使用类似本机会话的备用会话类。


我将我的框架从非数据库会话类修改为数据库会话类,当管理员注销以便以普通用户身份登录时,只需要确保在销毁后重新初始化会话类并使用sess_create,否则重定向会出错。 - Rooster

2
这是与浏览器有关的问题。我将以下代码放在构造函数中的MY_Controller中:
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");

例如:

举个例子:

if($this->uri->segment(1)=='admin') header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");

2

这是一个由第三方修复的问题,它可以修补会话控制器。让我找找看。自从它被注意到以来,我就在我的CodeIgniter设置中使用它。

这个问题只出现在IE7 / IE8中,与重定向或框架有关。

编辑

这是我以前找到的参考资料,它帮助我解决了IE问题。希望这就是你头疼的原因: http://www.philsbury.co.uk/blog/code-igniter-sessions


这个 bug 真是让人沮丧。我真的希望它是你提到的同样问题...我交叉着手指。 - John
我已更新答案,并提供了修复所需的参考信息。祝你好运。 - Jakub
发布时它是工作的,请稍后再来检查,它应该会恢复。链接有效...他们的服务器现在不行。 - Jakub

2

我们正在开发一个涉及Facebook选项卡的应用程序时遇到了这个问题。我们尝试了上面的方法,但都无济于事。以下是我们发现的问题:

  1. IE隐私设置似乎必须为中等或更低
  2. 如果您正在运行页面应用程序,请确保两个网址都使用HTTPS协议

此外,请查看有关cookie的紧凑隐私政策。


1

配置文件应用程序config.php

// 'cookie_secure' =  Cookies will only be set if a secure HTTPS connection exists. 
$config['cookie_secure']    = FALSE;

1
我解决了这个问题,使用原生的php会话而不是cookie(将codeigniter的session_id存储在php原生会话中)。
你可以在这里获取库:https://github.com/staskus/codeigniter-2.--native-session
只需将MY_Session.php文件复制到applications/libraries目录即可。

感谢@Justinas Staskus! - Aswin Kumar

0

当我尝试在CodeIgnitor中让登录页面工作时,这个问题困扰了我。会话无法保存。

事实证明,这是由于我从FREEDNS创建的域名包含下划线(_)导致的。我使用句点(.)重命名了域名,并恢复了所有建议在此帖子中进行的代码更改,然后,它就奏效了。

感谢本页上所有评论和贡献,因为它们真正引导我调查了那该死的下划线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接