问题:setcookie方法失效,每次重新打开浏览器,cookie里的 数据都会丢失。Thinkphp+smarty框架写的,帮我看看,谢谢<?php
class BaseAction extends Action {
protected $config;
function __construct() {
parent::__construct ();
//初始化.
$this->init ();
} /**
 * 初始化
 */
private function init() {
$this->loadMyConfig();
$this->checkState ();
                  $this->autoLogin();
$this->setSession();
$this->filterPostAndGet();
}
public function isLogin() {
if(Session::get ( 'user' )){
return true;
}
return false;
}
private function autoLogin() {
            if($this->isLongin) {
               return
            }
            if($_COOKIE['userName'] && $_COOKIE['password']) {
                $user = D('user')->login($_COOKIE['userName'],$_COOKIE['password']);
                if($user) {
                   Session::set('user',$user);
            }
         }
/**
 * 载入参数,并且输出到模板
 */
private function loadMyConfig() {
include_once '../Home/Conf/myConfig.php';
$this->config = getConfig();
$this->assign('myConfig',$this->config);
}


private function setSession() {
$this->assign ( 'user', Session::get ( 'user' ) );
}
      //其他方法}
class UserAction extends BaseAction {
/**
 * 显示login.tpl
 */
public function login() {
$this->generateAndAssignVerify();
$this->setPreUrl();
$this->display('user/login.tpl');
}

/**
 * 处理登陆请求.
 */
public function doLogin() {
$this->checkVerify();
$userM = D('User');
$user = $userM->login($_POST['pwuser'],$_POST['pwpwd']);
if($user) {
                            //TODO 这里,大侠们看看,如果把下面两行,放到baseAction里面的init方法中,就可以,放这里就不行,我**了,花了2个小时找原因。
                            setCookie("userName",$_POST['userName'],time()+$this->config['expired']);
                             setCookie("password",$_POST['password'],time()+$this->config['expired']);
Session::set('user',$user);
$this->success($this->config['LOGIN_SUCCESS_MSG'],$_POST['preUrl']);
}else {
$this->setPreUrl();
$this->error('登录失败');
}
}
         //其他方法。。
}
class UserModel extends BaseModel {
/**
 * 处理登陆
 * @param string $userName
 * @param string $password
 * @return array
 */
public function login($userName, $password) {
$password = SHA1($password);
$userList = $this->getUserListByCondition ( array ('userName' => $userName, 'password' =>  $password ) );
if (count ( $userList ) != 1) {
return false;
}
$arr = $userList [0];
if ($arr) {
//添加信息.
$arr ['ip'] = $_SERVER ['REMOTE_ADDR'];
$arr ['loginTime'] = time ();
unset ( $arr ['password'] );
}
return $arr;
}
//其他方法
}?>

解决方案 »

  1.   

    浏览器的是不是在关闭时清除cookie了。
      

  2.   

    不是,大侠,我把
    setCookie("userName",$_POST['userName'],time()+$this->config['expired']);
    setCookie("password",$_POST['password'],time()+$this->config['expired']);
    放到BaseAction类的autologin进行测试,就可以,像这样。private function autoLogin() {
                if($this->isLongin) {
                   return;
                }
                setCookie("userName",$_POST['userName'],time()+$this->config['expired']);
                setCookie("password",$_POST['password'],time()+$this->config['expired']);
                if($_COOKIE['userName'] && $_COOKIE['password']) {
                    $user = D('user')->login($_COOKIE['userName'],$_COOKIE['password']);
                    if($user) {
                       Session::set('user',$user);
                }
             }
    就可以保存信息,我也检查了有没有在设置cookie之前输出页面,也不是这个问题,郁闷
      

  3.   

     if($user) {//确认$user会是true,会执行里面的代码
            }建议var_dump($user);exit;看看什么内容