CodeIgniter:cookies、会话、太多重定向?

Posted

技术标签:

【中文标题】CodeIgniter:cookies、会话、太多重定向?【英文标题】:CodeIgniter: cookies, sessions, too many redirects? 【发布时间】:2016-05-12 13:17:40 【问题描述】:

我使用 CodeIgniter 2.2 创建了一个网站,但我在会话和 cookie 方面遇到了一些问题。

使用此配置(在 application/config/ 中)在 localhost 中一切正常:

$config['base_url'] = 'http://localhost:8888/project/';
...
$config['cookie_prefix']    = "";
$config['cookie_domain']    = "";
$config['cookie_path']      = "/";
$config['cookie_secure']    = FALSE;

但是当我在我的服务器上上传网站时,当我的 CI 网站是 (domain.com /test/):

$config['cookie_domain']    = "";
$config['cookie_domain']    = ".domain.com";

出现此类错误后,访问 domain.com/other 也无法正常工作。我必须退出网络浏览器才能回来。

所以我尝试了另一个我在此处找不到的线程上找到的配置,现在是登录过程(会话)不起作用。

$config['cookie_domain'] = str_replace("http:/","",str_replace("https://","", $config['base_url']));

登录方式如下:

查看/模板/header.php

<form method="post" action="<?php echo site_url('verifylogin/');?>">

    <input type="text" size="20" name="username" placeholder="username"/><br/>
    <input type="password" size="20" name="password" placeholder="password"/><br/>
    <input type="submit" value="Log in"/>
    <input type="hidden" name="current" value="http://<?php echo $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; ?>" /><br/>

</form>

controllers/verifylogin.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class VerifyLogin extends CI_Controller 

  function __construct()
  
    parent::__construct();
    $this->load->model('users_model','',TRUE);
    // does not seem to work $this->load->driver('session');
  

  function index()
  
    $data['title'] = 'Log in';

    //This method will have the credentials validation
    $this->load->library('form_validation');

    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');

    $this->form_validation->run();
    redirect($this->input->post('current'), 'refresh');

    return $data;
  

  function check_database($password)
  
    //Field validation succeeded.  Validate against database
    $username = $this->input->post('username');

    //query the database
    $result = $this->users_model->login($username, $password);

    if($result)
    
      $sess_array = array();
      foreach($result as $row)
      
        $sess_array = array(
          'id' => $row->id,
          'username' => $row->name
        );
        $this->session->set_userdata('logged_in', $sess_array);

        $set = $this->users_model->get_settings($row->id);
        $this->session->set_userdata('settings', $set);
      
      return TRUE;
    
    else
    
      $this->form_validation->set_message('check_database', 'Invalid username or password');
      return FALSE;
    
  

?>

【问题讨论】:

这是因为在你的控制器中你没有按照你应该的那样进行 form_validation。 而不是 redirect($this->input->post('current'), 'refresh') 只需尝试加载您的视图并传递 $data 变量还检查是否实际提交了表单或不通过 if($_SERVER['REQUEST_METHOD'] == 'POST') 看看这是否对你有帮助:) @killstreet 你是什么意思? @PraveenKumar 我会尝试直接加载视图!我已经以不同的方式检查了表单是否已提交(如果登录正确则重定向到一个页面,如果登录不正确则重定向到另一个页面),并且它有效。所以我的猜测是表单已正确提交并且代码工作会话数据不会以某种方式“粘住”。因此,为什么我认为这与 cookie 有关... @mtefi 然后你可以检查 function __construct() parent::__construct(); $this->load->model('users_model','',TRUE); if($this->session->userdata('logged_in')!==false) //重定向到别的地方 【参考方案1】:

尝试清除您的浏览历史记录、cookie 等

【讨论】:

清除 \application\cache\session 中的所有会话

以上是关于CodeIgniter:cookies、会话、太多重定向?的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter在nodejs中读取会话cookie

没有 Cookie 的 PHP 会话 | Codeigniter [关闭]

Codeigniter - 注销链接不起作用 - 会话和 cookie 未销毁

如何使 Codeigniter 会话与边缘一起工作?

Iphone 上的 Codeigniter 会话问题

如何防止 Laravel 中的会话/cookie 刷新?