问题: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;
}
//其他方法
}?>
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;
}
//其他方法
}?>
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之前输出页面,也不是这个问题,郁闷
}建议var_dump($user);exit;看看什么内容