我遇到了非常奇怪的问题,Codeigniter 3.0.3中的会话未保存用于下一个请求。每次请求完成时,它都会创建一个新的会话记录,下次不会使用它。
奇怪的是,在 HTTPS 版本的网站工作,但 HTTP 。
场景:在我网站的登录页面上,我做了一个AJAX调用(在这个调用中我设置了一些会话变量和flashdatas)。获得成功消息后,我将页面重新加载到配置文件页面。
当我使用HTTP时,整个过程不起作用,而是使用HTTPS。
任何帮助将不胜感激。
编辑v1:此外,甚至 CSRF 也无法通过HTTP运行。我禁用它来测试系统。
编辑v2: @DFriend要求的代码
的config.php
$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'jupiter';
$config['sess_expiration'] = 0;
$config['sess_save_path'] = "hkr_sessions";
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;
$config['cookie_prefix'] = '';
$config['cookie_domain'] = '.jupiter.rjv.me';
$config['cookie_path'] = '/';
$config['cookie_secure'] = TRUE; // PS: tried FALSE version as well, but no change.
$config['cookie_httponly'] = FALSE;
User.php 控制器
public function login_required() {
if (!$this->logged_in()) {
$this->session->set_flashdata("login_error", "You have to be logged in to see this page.");
$this->session->set_userdata('redirect_back', $this->agent->referrer());
redirectt('/login');
}
}
routes.php文件
$route['login/required'] = 'user/login_required';
这样一个简单的方法,当我浏览http://domain.ltd/login/required
时,它会重定向到http://domain.ltd/login
并显示打印消息,例如“您必须登录才能看到此页面。” 。用户登录后,会将用户重定向回以前的页面。
在我的情况下,它会重定向到/login
页面,但不会打印出flashdata消息。
这是 MY_Controller.php
class MY_Controller extends CI_Controller {
protected $logged_in = NULL;
protected $is_ajax = NULL;
protected $user_id = NULL;
public function __construct() {
parent::__construct();
log_message("DEBUG", "session variables: " . print_r($this->session->all_userdata(), true));
$this->logged_in = $this->session->userdata('logged_in');
$this->is_ajax = $this->input->is_ajax_request();
$this->user_id = $this->session->userdata('user_id');
}
}
如您所见,我在每个请求上打印出会话变量。
以下是HTTP请求的会话输出:
DEBUG - 2016-01-03 07:17:27 --> session variables: Array
(
[__ci_last_regenerate] => 1451805447
)
以下是HTTPS请求的会话输出:
DEBUG - 2016-01-03 07:19:44 --> session variables: Array
(
[__ci_last_regenerate] => 1451805564
[redirect_back] => https://jupiter.rjv.me/book/1497-sefiller-viktor-mari-huqo
)
我没有更改任何代码,只是尝试了两个请求,HTTP和HTTPS。会议结果不同。一个不保存,另一个保存。我希望这可以帮助您找出问题。
答案 0 :(得分:1)
我实际上是修改了.htaccess
文件中的标题,而且有一条规则导致了问题。请参阅注释行 - 该行是问题。
<IfModule mod_headers.c>
Header append Vary User-Agent env=!dont-vary
Header set X-XSS-Protection: "1; mode=block"
Header unset Server
Header set X-Content-Security-Policy "allow 'self';"
# Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
</IfModule>