codeigniter记得我按会话登录

时间:2017-08-03 10:52:12

标签: php codeigniter session config

我的config.php设置

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 0;
$config['sess_expire_on_close'] = TRUE;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

根据文档的工作正常,会话在浏览器关闭时到期。 但是,如果我想举行为期1年的会议(请记住我的功能)。

我试图覆盖设置以便记住我。但失败了

 $new_expiration = (60*60*24*365); //A year milliseconds

 $this->config->set_item('sess_expiration', $new_expiration);
 $this->config->set_item('sess_expire_on_close', FALSE);

 $this->session->sess_expiration = $new_expiration;
 $this->session->sess_expire_on_close = FALSE;
 $this->session->set_userdata('name','virat');

检查另一个文件上的代码

 echo $this->session->userdata('name');
print_r($this->session->userdata());

有没有办法通过忽略默认设置来保持会话? 我做错了什么? 版本:CI3

更新 - >> 我仍在努力实现这一目标。我想我找到了一个解决方法。 每次阅读会话时,CI都会更新会话cookie文件。

另一个问题是CI没有简单地通过$ this更新config.php值。

所以

public function __construct()
    {
        parent::__construct();
        $this->CI = & get_instance();
        $this->CI->config->set_item('sess_expiration', 1253);


    } 

直接调用CI本身的工作原理。它更新了config.php变量。 另一点是你需要在每个控制器中执行此操作“没有config.php覆盖的单个读取”将擦除cookie值和会话值。您也可以将它包含在MY_controller可选中。

1 个答案:

答案 0 :(得分:0)

好吧 - 我试着根据你的问题和那些评论来解释我会做什么

我假设您的复选框名称是“自动登录”,如

if(workoutPlan.isVisible()==true){
            BufferedReader br = null;
            try {
                br = new BufferedReader(new FileReader("Client Workout Plans.csv"));
            } catch (FileNotFoundException e1) {
                e1.printStackTrace();
            }
            String line = "";
            String cvsSplitBy = ",";
            String fullName = null;
            StringBuilder sb = new StringBuilder();

                br = new BufferedReader(new FileReader("Clients.csv"));
                boolean complete = false;
                while(complete!=true){
                    try {
                        line = br.readLine();
                        String[] data = line.split(cvsSplitBy);
                        String Name = existingClient.getFirst()+" "+existingClient.getLast();
                        int fullNameLength = Name.length(); 
                        if((data.length>0)&&((data[0].substring(0, fullNameLength)).equals(Name))){

                        }
                    } catch (IOException e1) {
                        // TODO Auto-generated catch block
                        e1.printStackTrace();
                    }
                }

    }

如果有人检查“记住我”并在提交凭据后,在您的登录控制器或模型中,您应该执行以下操作:

<input type="checkbox" name="autologin" value="1" />

之后 - 您需要更改的唯一内容是配置文件。

这样的事情,应该做的伎俩

$this->load->helper("cookie");

$autoLogin = $this->input->post("autologin",true);

if ($autoLogin == 1)
{
    $cookie = array(
        'name'   => 'autologin',
        'value'  => '1',
        'expire' => '31536000',
        'path'   => '/'
    );
    $this->input->set_cookie($cookie);
}
else
{
    delete_cookie("autologin");
}