用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2202|回复: 5
收起左侧

[HELP] 大家帮小弟看看我这个PHP写的添加cookie有什么问题?

[复制链接]
发表于 2012-10-11 18:38:01 | 显示全部楼层 |阅读模式
我在CI下做的一个网站,用cookie实现,在一分钟之内如果第二次或以上登录,不必转到登录画面,直接到欢迎画面,就和很多论坛的记录访问周期功能一样。其中欢迎画面的代码如下
welcome.php
<?php
if( ! isset($_COOKIE["name"] )) {    //第一次登录成功转到欢迎画面时,“name”cookie为空,所以以登录的username设cookie,时                            间60秒
  setcookie("name",$_POST["username"],time()+60);
}
?>
<html>
<body>
。。。
。。。
</body>
</html>
我60秒内再次访问主页Index.php,Index里判断cookie始终认为没有名为“name”的cookie。代码如下
index.php
<?php
class Index extends CI_Controller {

  public function display() {
    if( ! isset($_COOKIE['name'] )) {    //始终走这个分支,所以还转到登录画面
      if (!file_exists('application/views/login.php')) {   
        show_404();
      }
      $this->load->view('login');
    }else {      //正常应该走这个分支,到欢迎画面
      if ( ! file_exists('application/views/welcome.php' )) {
        show_404();
      }
      $this->load->view('welcome');
    }
  }
}

?>

经过调试,welcome.php里的setcookie没设上,代码有问题么?现在我是在CI框架下跑的。之前没用CI时,单独的PHP这个功能是好使的,cookie部分的代码直接移植过来,没改啊,高手指教,谢谢
 楼主| 发表于 2012-10-12 14:53:43 | 显示全部楼层
自己顶,谁来帮忙看下
 楼主| 发表于 2012-10-13 06:46:27 | 显示全部楼层
经过调试,发现setcookie没问题,setcookie后名为name的cookie已经进到$_COOKIE里了,但是当重新访问localhost/kidsland/index.php时,这个cookie就没了,好像被清空了。所以每次在index.php的display方法里判断 isset($_COOKIE['name'])时始终是没设置。问题是,为什么我在welcome.php里setcookie成功了,重新访问index.php页面该cookie就没了?cookie不是服务器发给浏览器保存起来的变量吗?在生命期内永远存于浏览器里啊?高手指教
ps:之前没用CI时,单独的几个php跑,此功能好用
发表于 2012-10-13 08:40:51 | 显示全部楼层
设置cookie的时候没有指定路径属性。
参考关于cookie的一些事
 楼主| 发表于 2012-10-14 14:52:14 | 显示全部楼层
yunnysunny 发表于 2012-10-13 08:40
设置cookie的时候没有指定路径属性。
参考关于cookie的一些事

解决了,就是path的问题,我调整了两点,把setcookie从welcome画面放到wel控制器里,这样和index控制器的读取cookie都在controllers文件夹下,然后在setcookie的path里设成'/',让所有路径的cookie都能读到。谢谢大家
发表于 2012-10-16 17:41:39 | 显示全部楼层
CI的COOKIE貌似有点问题

本版积分规则