如何通过memcache在TP框架中实现用户单一登录,防止多地点同时登录?
- 内容介绍
- 文章标签
- 相关推荐
本文共计368个文字,预计阅读时间需要2分钟。
php测试代码:LoginController.class.php配置Memcache连接:'memcache', 'host'=> 'localhost', 'port'=> 11211, 'prefix'=> '', 'expire'=> 120 // 缓存有效期
测试代码:LoginController.class.php'memcache', 'host' => 'localhost', 'port' => '11211', 'prefix'=> '', 'expire'=> 120 //缓存有效期 )); } public function index(){ //调用验证方法。可以将验证方法写入到一个公共类中,在构造方法中调用,需要进行登录验证的类,继承该公共的类 $this->home(); echo '
恭喜你,登录成功喽~
'; } public function home(){ if(!session('?username')){ $this->error('请登录','login'); }else{ //验证cookie中存放的sessionID是否等于缓存中的sessionID,如果不一致,则判断登录状态改变,然后清除该用户的session信息 $session_id = S(session('username')); if(!$session_id){ $this->error('登录过期,请重新登录','login'); } if(cookie('PHPSESSID') !== $session_id){ session('username',null); $this->error('您的账号在别处登陆,请重新登录','login'); } } } public function login(){ if(IS_GET){ //展示登录页面 $this->display(); }else{ $data = I('post.'); //查询用户信息 $res = M('user',null)->where("username='{$data['username']}'")->find(); if($data['password'] == $res['password']){ //如果用户信息正确,就将当前浏览器的session_id存入缓存 S($data['username'],session_id()); session('username',$data['username']); $this->success('登录成功','index'); } } } } 数据库文件:user.sqlSET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(20) DEFAULT NULL COMMENT '用户名称', `password` char(32) DEFAULT NULL COMMENT '用户密码', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
本文共计368个文字,预计阅读时间需要2分钟。
php测试代码:LoginController.class.php配置Memcache连接:'memcache', 'host'=> 'localhost', 'port'=> 11211, 'prefix'=> '', 'expire'=> 120 // 缓存有效期
测试代码:LoginController.class.php'memcache', 'host' => 'localhost', 'port' => '11211', 'prefix'=> '', 'expire'=> 120 //缓存有效期 )); } public function index(){ //调用验证方法。可以将验证方法写入到一个公共类中,在构造方法中调用,需要进行登录验证的类,继承该公共的类 $this->home(); echo '
恭喜你,登录成功喽~
'; } public function home(){ if(!session('?username')){ $this->error('请登录','login'); }else{ //验证cookie中存放的sessionID是否等于缓存中的sessionID,如果不一致,则判断登录状态改变,然后清除该用户的session信息 $session_id = S(session('username')); if(!$session_id){ $this->error('登录过期,请重新登录','login'); } if(cookie('PHPSESSID') !== $session_id){ session('username',null); $this->error('您的账号在别处登陆,请重新登录','login'); } } } public function login(){ if(IS_GET){ //展示登录页面 $this->display(); }else{ $data = I('post.'); //查询用户信息 $res = M('user',null)->where("username='{$data['username']}'")->find(); if($data['password'] == $res['password']){ //如果用户信息正确,就将当前浏览器的session_id存入缓存 S($data['username'],session_id()); session('username',$data['username']); $this->success('登录成功','index'); } } } } 数据库文件:user.sqlSET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for user -- ---------------------------- DROP TABLE IF EXISTS `user`; CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户id', `username` varchar(20) DEFAULT NULL COMMENT '用户名称', `password` char(32) DEFAULT NULL COMMENT '用户密码', PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

