我仍然是代码点火器的新手,我在登录系统工作时遇到了问题。
使用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->会话的变量转储,并确认在重定向之前所有用户数据都是完整的。会话有我的电子邮件信息,组信息和$ identity_column信息。
但是,在重定向之后,某些IE7浏览器上的会话数据为空,这就是为什么CI不断将我引导出系统的原因。它在其他IE7浏览器上完好无损,并且在Firefox中始终完好无损。
为什么会话数据会依赖浏览器?
有关如何进一步排除故障的任何想法?我很困惑......
答案 0 :(得分:7)
Codeigniter数据库会话类是一个令人沮丧的问题,最后我使用了这里的插件替换来使用本机会话:https://github.com/EllisLab/CodeIgniter/wiki/Native-session
答案 1 :(得分:6)
我在IE中使用CI Session时遇到了同样的问题。然后我在控制器构造函数中使用下面的标题,它适用于我。
以下是标题:
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
答案 2 :(得分:4)
我在浏览器模式下使用IE8时遇到了同样的问题。我发现问题在于匹配用户代理。在会话数据库中,它将useragent保存为IE7,但是从cookie中获取IE8。我已设置$config[sess_match_useragent] = FALSE
,问题就解决了。
答案 3 :(得分:3)
会话类在我的几个项目中运行良好,包括IE6 / 7/8支持(包括多个CI版本)。在上面粘贴的代码之外,有一些可能导致这种情况:
$this->session->sess_create();
会重置您的会话。set_userdata
个调用与一个调用相结合,然后将其传递给一个数组。或者,考虑替代会话类,如Native sessions
答案 4 :(得分:2)
这是某人为第三方修复的问题,它修补了会话控制器。让我把它挖出来。我已经在我的codeigniter设置中使用它,因为它是第一次被注意到。
此问题是IE7 / IE8特有的重定向或帧。
修改强>
这是我之前找到的参考资料,它帮助我解决了IE问题。希望这是令你头疼的原因: http://www.philsbury.co.uk/blog/code-igniter-sessions
答案 5 :(得分: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");
答案 6 :(得分:2)
当我们遇到这个问题时,我们正在开发一个涉及Facebook标签的应用程序。我们尝试了以上无济于事。这是我们发现的:
另外,请查看有关Cookie的精简隐私权政策。
答案 7 :(得分:1)
配置文件应用程序config.php
// 'cookie_secure' = Cookies will only be set if a secure HTTPS connection exists.
$config['cookie_secure'] = FALSE;
答案 8 :(得分:1)
我通过使用本机php会话而不是cookie(在php本地会话中存储codeigniter session_id)来解决这个问题。
您可以在此处抓取图书馆:https://github.com/staskus/codeigniter-2.--native-session。
只需将MY_Session.php文件复制到应用程序/库
即可答案 9 :(得分:0)
问题是IE拒绝了CI试图设置的cookie。本机会话是一种方式,但是如果您想继续使用CI会话,我已成功完成以下故障排除:
答案 10 :(得分:0)
我讨厌IE!
现在正在为我们的控制器提供P3P解决问题:
class Chupacabra extends CI_Controller {
function __construct() {
parent::__construct();
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
}
答案 11 :(得分:0)
当我尝试使用登录页面在CodeIgnitor中工作时,这个问题困扰着我。会议不会保存。
事实证明,这是由于我从FREEDNS创建的域名包含下划线(_
)。我使用句点(.
)重命名了域名,并还原了本文中建议的所有代码更改,而Voila,它的工作原理。
感谢您对此页面上的所有评论和贡献,因为他们确实让我走上了调查这一重点的道路。