【问题标题】:cookie unset not working properly未设置 cookie 无法正常工作
【发布时间】:2013-12-05 20:14:57
【问题描述】:

我在我的登录页面中使用了记住选项。我认为我做得对,但是在注销时我无法取消设置 cookie 变量。我使用的是 CI,但对于 cookie,我使用的是本机 cookie。什么是我做错了吗?我的代码: 在登录控制器中:

function index(){
if(isset($_COOKIE['remember_me'])){
  redirect('index');
}elseif($this->input->post()){
  $username = $this->input->post('username');
  $password = $this->input->post('password');
  $remember = $this->input->post('remember');
  if($remember){
      $time = time()+60*60*24*365;
      setcookie('remember_me', $username , $time);
  }
  $this->session->set_userdata('user_name', $user_name);
  $this->session->set_userdata('full_name', $full_name);
  $this->session->set_userdata('server', $server->exchange_server);
  redirect('index');
}else{
  $this->load->view('login');
}
}
function logout(){
 $this->session->unset_userdata('user_name');
 $this->session->unset_userdata('full_name');
 $this->session->unset_userdata('server');
 $data['login'] = 'Logout Successfully.';
 $data['class'] = 'success';
 $this->session->set_flashdata($data);
/* To unset cookie i tried following different approach but to no avail*/
setcookie('remember_me');
setcookie('remember_me', '', $time()-60*60*24*365);
setcookie('remember_me', false);
unset($_COOKIE['remember_me']);
 redirect('login');
}

但无济于事。我只是无法取消设置 cookie,并且当检查了记住我选项的用户尝试注销时,它没有发生。 欢迎任何帮助/建议。谢谢

我不知道是什么问题,但我使用 jquery 插件删除 cookie {https://github.com/carhartl/jquery-cookie}。我包括了 jquery.cookie.js,然后在注销时单击我删除了设置为 $.removeCookie('remember_me')

的 cookie

【问题讨论】:

  • 你什么时候调用logout()函数?在这个函数中$time()-60*60*24*365 似乎是0
  • @alesdario 没听清楚。你是什么意思?当用户想通过注销按钮注销时,我调用 logout() 函数。
  • setcookie('remember_me', '', $time()-60*60*24*365); 应该是 setcookie('remember_me', '', time()-60*60*24*365);setcookie('remember_me', '', $time-60*60*24*365);
  • @alesdario 不工作 :(
  • 你为什么使用本机 setcookie 函数而不是 CI?

标签: php codeigniter cookies


【解决方案1】:

unset($_COOKIE['some_cookie'])

您没有删除浏览器上的 Cookie,而是取消了变量 $_COOKIE['some_cookie'] 的设置。

如果你想删除浏览器cookie,你必须将过期日期设置为过去:

setcookie("some_cookie", "", time()-3600);

如果它不起作用,请尝试正确设置 cookie 域。

创建:

setcookie('some_cookie', null, time() + 3600, "/");

删除:

setcookie('some_cookie', null, time() - 3600, "/");

【讨论】:

  • 尝试使用您提到的选项但无济于事,所以我只是使用 javascript 删除了 cookie,如下面的回答中所述
【解决方案2】:

我不知道是什么问题,但我使用 jquery 插件删除 cookie {https://github.com/carhartl/jquery-cookie}。我包含了 jquery.cookie.js,然后在注销时单击我删除了设置为 $.removeCookie('remember_me') 的 cookie,它工作正常。感谢您的建议和帮助。

【讨论】:

  • 库中似乎有一些错误(github.com/js-cookie/js-cookie)。除了这种方式,我无法使用任何其他方式删除 cookie。非常感谢 samjhana joshi
【解决方案3】:

请使用此功能

delete_cookie()

对于原生 php cookie 使用

 unset($_COOKIE['remember_me']);

或者如下使用CI函数

setcookie('remember_me', null, -1);

就是这样

【讨论】:

  • @SamyMassout 因为它是 CI 功能,我也尝试如下使用它,但无济于事。 $this->load->helper('cookie'); delete_cookie('remember_me');但它不起作用 cookie 并没有取消设置。
  • 两者都不起作用。为什么??是因为将cookie设置为明年的时间还是什么?
  • 你在哪里设置还记得我吗?你能发布这部分代码吗?
  • 我在登录中设置了记住我> 索引函数为 if($remember){ $time = time()+60*60*24*365; setcookie('remember_me', $username , $time); }
  • @SamyMassoud 什么是 CI 函数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
  • 2013-02-08
  • 2014-09-28
相关资源
最近更新 更多