TP3.2.3使用session时遇到的困惑,谁能帮忙解答一下

浏览:4762 发布日期:2017/01/10 分类:求助交流 关键字: 两周内自动登录
遇到的问题:我的环境是TP3.2.3,做了个两周内自动登录的功能,但用过一段时间后,发现打开网站时,登录着别人的账号,有时别人打开网站,登录着我的账号,貌似感觉是缓存数据串号了一样,按理说缓存都是保存在每个人的电脑上,怎么感觉像是在服务器端共享了这个缓存一样。
大侠帮忙看一下问题出在哪里?

---登录时记住密码:
FrontendController控制器为前台基础控制器class LoginController extends FrontendController
{
    /* 会员登录验证 */
    public function check()
    {
         // ...
         //登录成功后
         $this->remember(); //两周内记住账号
         // ...

    }

    /* 两周内记住账号 */
    private function remember()
    {
        $remember_me = I('remember_me', null, 'int');
        if (!$remember_me) {
            return false;
        }
        $mobile = I('post.mobile', '', '/^1[34578]\d{9}$/');
        $pwd = I('post.pwd', '');
        if (empty($mobile) || empty($pwd)) {
            return false;
        }
        $pwd = md5($pwd);
        $account = $mobile . '|' . $pwd;
        $account = encrypt($account, '', 1209600); //两周时间=60X60X24X14秒   加密存储
        cookie('_RM', $account, array('expire' => 1209600, 'httponly'=>1));  //写入客户端缓存
    }

//...
}
---自动登录的代码:class FrontendController extends Controller
{
    /* 两周内自动登录 */
    public function _initialize()
    {
        if (!IS_LOGIN && $account = cookie('_RM')) {
            $account = decrypt($account);  //解密
            list($mobile, $pwd) = explode('|', $account);  //解析出用户名和密码
            $user = D('User');
            $id = $user->getUserField(array('mobile' => $mobile, 'pwd' => $pwd), 'id'); //判断是否存在这个用户
            if (!is_null($id)) {
                $user->autoLogin($id); //传入用户ID,实现自动登录
            } else {
                cookie('_RM', null); //记录密码的缓存名称
            }
        }
    }

//....

}
---其他:

Home模块的配置/* SESSION 和 COOKIE 配置 */
'SESSION_PREFIX'    => 'home', //session前缀
'COOKIE_PREFIX'     => 'home_', // Cookie前缀 避免冲突
/* 数据缓存 */
'DATA_CACHE_PREFIX' => 'vc_',
Admin模块的配置:/* SESSION 和 COOKIE 前缀 */
'SESSION_PREFIX'  => 'admin',
'COOKIE_PREFIX'   => 'admin_',
/* 数据缓存 */
'DATA_CACHE_PREFIX' => 'vc_',
用户登录时,session的处理:/* 写入session 并数字签名 */
$user_data = array(
      'id' => $userid,
      'mobile' => $mobile,
      'last_time' => $last_time,
 );
session('user', $user_data);
退出时的操作:class UserController extends FrontendController {
//前台
public function logout()
 {
        session('user', null);
        cookie('_RM', null); //清空 两周内自动登录 缓存
        $this->redirect('/');
 }

//...
}
最佳答案
评论( 相关
后面还有条评论,点击查看>>